• PHP 中的魔术方法——属性重载


    属性重载

    PHP重载:是指,使用一个对象(或类)的时候,如果访问了其并没有定义的(即不存在的)属性或方法,则会使用某些预先定义好的“特殊方法”来应对这种情况。

    php中的重载,其实是一种内部“应对非法使用对象或类的措施”

    __set($name,$value)该方法, 在对一个对象不存在的属性进行赋值的时候,会被自动调用

    __get()该方法,在对一个对象不存在的属性进行取值的时候,会被自动调用!

     __isset($name)该方法,在对一个对象不存在的属性进行isset()判断的时候,会被自动调用!

     

    __unset($name)该方法,在对一个对象不存在的属性进行unset()操作的时候,会被自动调用!

     

     

     Demo:

       

     1  class Test{
     2         public $p = 1;
     3         public $list = array();
     4         function __set($name,$val){
     5 
     6             // echo "<p>你竟然在用一个不存在的属性 $name";
     7             // echo "<br>你试图给其赋值 $val";
     8             $this->list[$name] = $val;
     9         }
    10         function __get($name){
    11             if(!empty($this->list[$name])){
    12                 return $this->list[$name];
    13             }else{
    14                 return "该属性不存在";
    15             }
    16         }
    17         function __isset($name){
    18             if(isset($this->list[$name])){
    19                 return true;
    20             }else{
    21                 return false;
    22             }
    23         }
    24         function __unset($name){
    25             unset($this->list[$name]);
    26         }
    27     }
    28 
    29     $t = new Test();
    30     $t->p = 11; //使用存在的属性赋值
    31     $t->p2 = 22;//使用不存在存在的属性赋值
    32     $t->host="localhost";//使用不存在存在的属性赋值
    33     $t->port = "3306";//使用不存在存在的属性赋值
    34     echo "<pre>";
    35     var_dump($t);
    36     echo "</pre>";
    37     echo "<br>属性p=".$t->p;
    38     echo "<br>属性p2=".$t->p2;
    39     echo "<br>属性p3=".$t->p3;
    40 
    41     echo "<br>";
    42     echo "<br>属性p是否存在?";
    43     var_dump(isset($t->p));
    44     echo "<br>属性p2是否存在?";
    45     var_dump(isset($t->p2));
    46     echo "<br>属性p3是否存在?";
    47     var_dump(isset($t->p3));
    48 
    49     echo "<br>";
    50     echo "<br>unset()属性p2之前<br>";
    51     print_r($t->list);
    52     unset($t->p2);
    53     echo "<br>unset()属性p2之后<br>";
    54     print_r($t->list);
    View Code
  • 相关阅读:
    ASP.NET异步处理
    C# TPL学习
    canvas 动画库 CreateJs 之 EaselJS(上篇)
    kafka消息的可靠性
    流式处理框架storm浅析(下篇)
    流式处理框架storm浅析(上篇)
    网易严选后台系统前端规范化解决方案
    Question | 移动端虚拟机注册等作弊行为的破解之道
    Puppeteer入门初探
    ThreeJs 3D 全景项目开发总结
  • 原文地址:https://www.cnblogs.com/godLike7/p/6808324.html
Copyright © 2020-2023  润新知