为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
PHP

课程名称:大话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

图片描述
图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消