PHP魔术变量和魔术方法

魔术变量:
    __LINE__ 文件中的当前行号。
    __FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
    __DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
    __FUNCTION__ 本常量返回该函数被定义时的名字.
    __CLASS__ 返回定义的类名。
    __TRAIT__  http://www.php.net/manual/zh/language.oop5.traits.php
    __METHOD__ 返回该方法被定义时的名字。
    __NAMESPACE__ 当前命名空间的名字。
魔术方法:
    __get() //自动获取私有属性,公开的属性不会调用。

    __set() //自动设置私有属性,公开的属性不会调用。

    __isset()//当用使用isset()方法去测定对象里面成员是否被设定时,如果成员是私有成员的话无法直接访问,只要在类里面加__isset()就可以通过isset()在外部测定私有成员属性了。

    __unset()//当通过unset()删除私有属性的时候,类内加__unset()将会自动调用删除私有属性。


class Person
{
    private $name;
    private $sex;
    private $age;
    
    function say()
    {
        echo "name" . $this->name . "sex" . $this->sex . "age" . $this->age;            
    }

    function __get($property_name)
    {
        return $this->$property_name;
    }

    function __set($property_name, $value)
    {
        $this->$property_name = $value;
    }

    function __isset($nm)
    {
        return isset($this->$nm);
    }

    function __unset($nm)
    {
        unset($this->$nm);
    }
}

$p1 = new Person();

$p1->name = 'xiaowang'; //如果没有__set 会报错,不能再类外部操作私有属性
echo $p1->name;//如果没有__get 会报错,不能在类外部操作私有属性。
//通过自动调用__get()和__set()方法直接存取封装的私有成员的。

    __toString()  使用echo 或者print 直接输出一个对象时,自动调用此魔术方法。
    __clone()  在使用 clone 关键字科隆对象时,自动调用此方法,对科隆出来的对象初始化。
    __sleep()  在串行化的时候自动调用。可以设置需要串行化的对象属性。
    __wakeup() 字符串返串行化时调用。对串行化回来的对象进行初始化。

转载于:https://my.oschina.net/zhubaoxin/blog/1585328

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值