zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    .NET中获取系统硬件信息
    TTF文件的制作——打造属于自己的字体
    HDU4415 Assassin’s Creed
    HDU4193 Nonnegative Partial Sums(单调队列)
    HDU4414 Finding crosses
    HDU4407 Sum
    HDU4403 A very hard Aoshu problem
    HDU4417 Super Mario
    HDU4419 Colourful Rectangle
    非递归快速排序和非递归快速乘幂
  • 原文地址:https://www.cnblogs.com/chencuixin/p/6635240.html
Copyright © 2011-2022 走看看