摘要:__set() 方法用于设置私有属性值。__get() 方法用于获取私有属性值。__isset() 当使用 isset()函数或者empty()函数 判断属性是否存在或者是否为空的时候会自动触发---方法用于检测私有属性值是否被设定。__unset() 方法用于删除私有属性。class Person{ //属性
__set() 方法用于设置私有属性值。
__get() 方法用于获取私有属性值。
__isset() 当使用 isset()函数或者empty()函数 判断属性是否存在或者是否为空的时候会自动触发---方法用于检测私有属性值是否被设定。
__unset() 方法用于删除私有属性。
class Person{
    //属性
    public $name;
    private $age;
    //构造方法
    public function __construct($name,$age) {
        $this->name = $name;
        $this->age  = $age;
    }
     public function __isset($name){
        return isset($name);
     }
   
}
//实例化
$person = new Person('小泽马利亚',35);
//判断
var_dump(isset($person->name));            //true
echo '<hr>';
var_dump(isset($person->age));            //trueisset($person->name); true 能访问到,不经过__isset()
isset($person->age);         true  访问不到,经过__isset()魔术方法,判断出age属性是存在的,返回true
class Person {
    private $name;
    private $sex;
    private $age;
    //__set()方法用来设置私有属性
    function __set($property_name, $value) { 
        echo "在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值<br />";
        $this->$property_name = $value; 
    }
    //__get()方法用来获取私有属性
    function __get($property_name) {  
        echo "在直接获取私有属性值的时候,自动调用了这个 __get() 方法<br />";
        return isset($this->$property_name) ? $this->$property_name : null;
    }
    
    public function __unset($name)
    {
         unset($this->$name);
    }
}
$p1=new Person();
//直接为私有属性赋值的操作, 会自动调用 __set() 方法进行赋值
$p1->name = "张三";
//直接获取私有属性的值, 会自动调用 __get() 方法,返回成员属性的值
echo "我的名字叫:".$p1->name; 
$p1->sex = 'man';
if (isset($p1->sex)) {
  unset($p1->sex);
}
echo '<hr>';
@$so = $p1->sex;
var_dump($so);   //NULL$p1->name = "张三";  直接为私有属性赋值的操作, 会自动调用 __set() 方法进行赋值
echo "我的名字叫:".$p1->name;   直接获取私有属性的值, 会自动调用 __get() 方法,返回成员属性的值 
__unset() 方法用于删除私有属性。
同 isset() 函数一样,unset() 函数只能删除对象的公有成员属性,当要删除对象内部的私有成员属性时,需要使用__unset() 方法:
class Site
{
    public function show($arguments)
    {
        $title = func_get_arg(0);
        $desc = func_get_arg(1);
        return 'Site::show():<br>站点名称'.$title.'<br>站点描述:'.$desc;
    }
    public static function add($arguments)
    {
        $m = func_get_arg(0);
        $n = func_get_arg(1);
        return 'Site::add():<br>'.$m.' + '.$n.' = '.($m+$n);
    }
}
class Web
{
    public function __call($method, $arguments)
    {
        return call_user_func_array([new Site,'show'],$arguments);
    }
    public static function __callStatic($name, $arguments)
    {
        return call_user_func_array(['Site','add'],$arguments);
    }
}
//实例化
$web = new Web();
//访问一个不存在的动态方法
echo $web->show('phP.net','PHP在线官方网站'), '<hr>';
//访问一个不存在的静态方法
echo Web::add(30,50);1.__call($method, $args):访问对象中不可访问的方法时,自动调用
2.__callStatic($method,$args):在静态上下文中调用一个不可访问方法时调用
method: 方法名, $args: 枚举数组,里面存放着传递给方法的参数,,,call_user_func_array有两个参数,第1个参数是一个字符串,表示要调用的函数名,第2个参数是一个数组,表示参数列表,按照顺序依次会传递给要调用的函数
						批改老师:韦小宝批改时间:2019-01-07 09:08:09		
						
老师总结:总结的很不错 写的也很完整  代码中的注释也是没毛病的					
 
                 
 
 
  
            