zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    结合使用allure当中的方法 让用例执行结果内 显示详细描述信息
    pytest-repeat插件,指定用例重复运行、重复运行次数
    pytest-xdist 分布式执行用例
    token
    使用pytest-ordering 来自定义用例执行顺序
    用例编写规则、命令行执行用例、用例执行的先后顺序
    python 中的doctest单元测试框架
    pytest 对用例mark标记分类(且用例也可按照分类来执行)
    学习webpack基本配置(一)
    (剑指offer)数组中出现次数超过一半的数字
  • 原文地址:https://www.cnblogs.com/godLike7/p/6808324.html
Copyright © 2011-2022 走看看