不确

__isset();  未定义   的   属性调用 isset 时,调用。

__unset(); 未定义   的   属性调用unset 时,调用。

__get();   调用一个类内 未定义 属性时,调用。

__set();      给一个类内 未定义  属性赋值时,调用。

 

 

class C{

function __set($p, $p1){
var_dump(__METHOD__);
}

function __get($p){
var_dump(__METHOD__);
}

function __isset($p){
var_dump(__METHOD__);
}

function __unset($p){
var_dump(__METHOD__);
}
}


$c = new C;
var_dump(isset($c->a));
unset($c->a);
var_dump($c->a);
$c->a = 1;

=======================>

string(10) "C::__isset"
bool(false)
string(10) "C::__unset"
string(8) "C::__get"
NULL
string(8) "C::__set"

 

 

__invoke();   __debugInfo

 

class CallableClass
{
  function __invoke($x) {
    $x();
  }

 

  function __debugInfo(){

    return ['property' => 1];

      }
}


$obj = new CallableClass;
$obj(function(){var_dump(1);});//int(1)
var_dump(is_callable($obj));//bool(true)

var_dump($obj);//带着参数的对象。

 

__set_state();     当调用 var_export() 导出类时,此静态 方法会被调用。

 

<?php

class A
{
    public $var1;
    public $var2;

    public static function __set_state($an_array) // As of PHP 5.1.0
    {
        $obj = new A;
        $obj->var1 = $an_array['var1'];
        $obj->var2 = $an_array['var2'];
        return $obj;
    }
}

$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';

eval('$b = ' . var_export($a, true) . ';'); // $b = A::__set_state(array(
                                            //    'var1' => 5,
                                            //    'var2' => 'foo',
                                            // ));
var_dump($b);

?>

posted on 2018-08-31 20:12  zhco  阅读(299)  评论(1编辑  收藏  举报

导航