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
  • 相关阅读:
    HDU2059(龟兔赛跑)
    pat 1012 The Best Rank
    pat 1010 Radix
    pat 1007 Maximum Subsequence Sum
    pat 1005 Sign In and Sign Out
    pat 1005 Spell It Right
    pat 1004 Counting Leaves
    1003 Emergency
    第7章 输入/输出系统
    第六章 总线
  • 原文地址:https://www.cnblogs.com/chencuixin/p/6635240.html
Copyright © 2011-2022 走看看