php 魔术方法
php 魔术方法
别人说我名字很长 发表于2年前
php 魔术方法
  • 发表于 2年前
  • 阅读 30
  • 收藏 1
  • 点赞 1
  • 评论 0

腾讯云 学生专属云服务套餐 10元起购>>>   

//实例化对象时,会调用对象的__construct方法
$obj = new Object();
//给对象不存在的属性赋值时,会调用对象的__set方法
$obj->title = "hello";
//使用对象不存在的属性时,会调用对象的__get方法
echo $obj->title;
//调用对象不存在的方法时,会调用对象的__call方法
$obj->test("hello",123,567);
//调用不存在的类静态方法时,会调用类的__callStatic方法
Object::staticMethod("static","not found method");
//直接输出对象时,会调用对象的__toString方法
echo $obj;
//将一个对象当作函数一样使用时,会调用对象的__invoke方法
echo $obj("test");
//克隆对象时,会调用对象的__clone方法
$obj2 = clone $obj;
//判断对象属性是否存在时,会调用对象的__isset方法
var_dump(isset($obj->aaa));
//销毁对象属性时,会调用对象的__unset方法
unset($obj->aaa);


class Object{

    protected $array = array();

    function __construct()
    {
        echo __METHOD__."你正在实例化对象<br>";
    }

    function __set($name, $value)
    {
        $this->array[$name]=$value;
    }

    function __get($name)
    {
        return $this->array[$name];
    }

    function __call($name, $arguments)
    {
        var_dump($name,$arguments);
        return "magic function\n";
    }

    static function __callStatic($name, $arguments)
    {
        var_dump($name,$arguments);
        return "magic static function";
    }

    function __toString()
    {
        return __CLASS__.'<br>';
    }

    function __invoke($arguments)
    {
        var_dump($arguments);
        return __METHOD__.'<br>';
    }

    function __clone()
    {
        echo __METHOD__."你正在克隆对象<br>";
    }

    function __isset($name)
    {
        echo __METHOD__."你想判断有没有属性".$name."<br>";
        return 1;
    }

    function __unset($name)
    {
        echo __METHOD__."你想删除属性".$name."<br>";
    }


    function __destruct()
    {
        echo __METHOD__."你正在注销对象<br>";
    }



}



共有 人打赏支持
粉丝 53
博文 227
码字总数 83765
×
别人说我名字很长
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: