PHP 中的魔术方法——属性重载

属性重载

PHP重载:是指,使用一个对象(或类)的时候,如果访问了其并没有定义的(即不存在的)属性或方法,则会使用某些预先定义好的“特殊方法”来应对这种情况。

php中的重载,其实是一种内部“应对非法使用对象或类的措施”

__set($name,$value)该方法, 在对一个对象不存在的属性进行赋值的时候,会被自动调用

 

__get()该方法,在对一个对象不存在的属性进行取值的时候,会被自动调用!

 __isset($name)该方法,在对一个对象不存在的属性进行isset()判断的时候,会被自动调用!

 

 

__unset($name)该方法,在对一个对象不存在的属性进行unset()操作的时候,会被自动调用!

 

 

 

 

 Demo:

   

 1  class Test{
 2         public $p = 1;
 3         public $list = array();
 4         function __set($name,$val){
 5 
 6             // echo "<p>你竟然在用一个不存在的属性 $name";
 7             // echo "<br>你试图给其赋值 $val";
 8             $this->list[$name] = $val;
 9         }
10         function __get($name){
11             if(!empty($this->list[$name])){
12                 return $this->list[$name];
13             }else{
14                 return "该属性不存在";
15             }
16         }
17         function __isset($name){
18             if(isset($this->list[$name])){
19                 return true;
20             }else{
21                 return false;
22             }
23         }
24         function __unset($name){
25             unset($this->list[$name]);
26         }
27     }
28 
29     $t = new Test();
30     $t->p = 11; //使用存在的属性赋值
31     $t->p2 = 22;//使用不存在存在的属性赋值
32     $t->host="localhost";//使用不存在存在的属性赋值
33     $t->port = "3306";//使用不存在存在的属性赋值
34     echo "<pre>";
35     var_dump($t);
36     echo "</pre>";
37     echo "<br>属性p=".$t->p;
38     echo "<br>属性p2=".$t->p2;
39     echo "<br>属性p3=".$t->p3;
40 
41     echo "<br>";
42     echo "<br>属性p是否存在?";
43     var_dump(isset($t->p));
44     echo "<br>属性p2是否存在?";
45     var_dump(isset($t->p2));
46     echo "<br>属性p3是否存在?";
47     var_dump(isset($t->p3));
48 
49     echo "<br>";
50     echo "<br>unset()属性p2之前<br>";
51     print_r($t->list);
52     unset($t->p2);
53     echo "<br>unset()属性p2之后<br>";
54     print_r($t->list);
View Code

 

posted @ 2017-05-04 17:28  Rakishly  阅读(147)  评论(0编辑  收藏  举报