继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第3天--大话PHP设计模式第四章节PHP面向对象

万万的小刀
关注TA
已关注
手记 21
粉丝 1
获赞 1

课程名称:大话PHP设计模式

课程章节: 4-3PHP魔术方法的使用

主讲老师:Rango

课程内容:

PHP魔术方法的使用

1、__get / __set

2、__call / __callStatic

3、__toString

4、__invoke

课程收获:

学习到了4类魔术方法的作用和如何使用

__get和__set魔术方法。

__get :当试图获取一个不存在的对象属性时, 类会自动调用__get

__set :当对一个不存在的对象属性进行赋值时 ,类会自动调用__set

class Objects
{
    protected $array = array();

    function __set($key,$value)
    {
        var_dump(__METHOD__); //Test\Objects::__set
        $this->array[$key] = $value;
    }

    function __get($key)
    {
        var_dump(__METHOD__);  //Test\Objects::__get
        return $this->array[$key];
    }
}


$obj = new Objects();
$obj->title = "hello";
echo $obj->title; //hello

__call和__callStatic魔术方法。

__call:当试图获取一个不存在的对象方法时, 类会自动调用__call

__callStatic:当试图获取一个不存在的对象静态方法时,类会自动调用__callStatic (区别就是这个是用在类的静态方法)

class Objects
{
    function __call($func, $param)
    {
        var_dump($func ,$param);
        return "magic funcation\n";
    }

    static function __callStatic($func, $param)
    {
        var_dump($func ,$param);
        return "magic static funcation\n";
    }
}


$obj = new Objects();
echo $obj->test1("hello",123); 
//test1
//array(2) { [0]=> string(5) "hello" [1]=> int(123) }
//magic funcation

echo $obj::test2("hellol",1234);
//test2
//array(2) { [0]=> string(5) "hellol" [1]=> int(1234) }
//magic static funcation

__toString魔术方法。

__toString: 当直接输出对象引用时候,会自动调用__toString魔术方法中返回的字符串

namespace Test;

class Objects
{
    function __toString()
    {
        return __CLASS__;
    }
}


$obj = new Objects();
echo $obj; //Test\Objects

__invoke魔术方法。

__invoke: 当调用函数的方式调用一个对象时,__invoke魔术方法会被自动调用。

class Objects
{
    function __invoke($param)
    {
        var_dump($param);
        return "invoke";
    }
}

$obj = new Objects();

echo $obj("test1");
//test1
//invoke

扩展

__construct、__destruct 魔术方法。

__construct: 构造方法,当一个对象被创建时会调用此方法

__destruct : 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法

class Person
{                                                                      
       public $name;        
       public $age;        
       public $sex;        
                                                                 
       /**
        * 显示声明一个构造方法且带参数
        */                                                                                       
       public function __construct($name="", $sex="男", $age=22)
       {      
           $this->name = $name;
           $this->sex = $sex;
           $this->age = $age;
       }
       
       /**
        * say 方法
        */
       public function say()
       { 
           echo "我叫:" . $this->name . ",性别:" . $this->sex . ",年龄:" . $this->age;
       }   
                                                                                           
}
 
$Person1 = new Person();
echo $Person1->say(); //我叫:,性别:男,年龄:22
 
$Person2 = new Person("小明");
echo $Person2->say(); //我叫:小明,性别:男,年龄:22
 
$Person3 = new Person("李四","男",25);
echo $Person3->say(); //我叫:李四,性别:男,年龄:25

图片描述
图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP