php 魔术方法

php类与对象的魔术方法
1.__construct():构造函数,在实例化对象时被调用

2.__destruct():解析函数。(不常用)

3.__set():属性重载,在给不可访问属性赋值时,会被调用

4.__isset():属性重载,当对不可访问属性调用isset()时,会被调用,返回布尔值

5.__unset():属性重载,当对不可访问属性调用unset()时,会被调用

6.__clone():克隆

7.__toString():用于返回一个字符串。只有在直接使用于echo或print时才能生效

8.__autoload():自动加载类文件

9.__get():属性重载,在读取不可访问属性的值时,会被调用

10.__call():方法重载,在对象中调用一个不可访问方法时,__call会被调用

11.__autoload():没有引入文件时自动加载

12.__sleep():当对象串行化(serialize()串行化对象)那一瞬间会调用该方法。不能返回父类的私有成员名字。

13.__wakeup():在反序列化操作(unserialize()反序列化)那一瞬间会调用该方法。

注意:属性重载只能在对象中进行。在静态方法中,这些魔术方法不会被调用,所以这些方法不能被声明为static。

eg:

  

function __autoload($name){
    include_once $name.".class.php";
}
$human = new Human();
echo $human->age."<br>";//18


class Student
{
    public $name,$age;
    function __construct($name,$age){
        $this->name = $name;
        $this->age = $age;
    }
    function __toString()
    {
        // TODO: Implement __toString() method.
       return $this->name."今年".$this->age;
    }
    function __clone()
    {
        // TODO: Implement __clone() method.
    }
    //不存在函数时会调用该方法
    function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        echo $name."方法不存在"."<br>";
        print_r($arguments);
        echo "<br>";
    }
    function __isset($name)
    {
        // TODO: Implement __isset() method.
        //echo "Is"."&nbsp".$name."&nbsp"."set?";
    return  isset($this->data[$name]);
    }
    //当对象被串行化那一瞬间
    function __sleep()
    {
        // TODO: Implement __sleep() method.
        echo "我要睡着了";
        return array("name","age");
    }
    //当字符串反序列化变回对象那一瞬间调用
    function __wakeup()
    {
        // TODO: Implement __wakeup() method.
        echo "<br>";
        echo "我要醒了";
    }
}


$stu = new Student("张三",18);
echo $stu."<br>";       //张三今年18
$stu2 = clone $stu;
$stu2->name = "李四";
echo $stu2."<br>";      //李四今年18
$stu2->show("王五",18);  //show方法不存在   Array ( [0] => 王五 [1] => 18 ) 
var_dump(isset($stu2->num));  //bool(false)
echo "<br>";
//串行化对象
$str = serialize($stu);   //此时调用sleep函数,输出我要睡着了
echo "<br>";    
echo $str;   //O:7:"Student":2:{s:4:"name";s:6:"张三";s:3:"age";i:18;}
//反序列化字符串
$strToArr = unserialize($str);   //此时调用wakeup函数,输出我要醒了
echo "<br>";
echo $strToArr;            //张三今年18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值