• __set() __get() _isset() __unset() 在__unset() 在类中没有事先声明和已经声明过的属性调用unset的区别


    <?php
    //echo strtr("I Love Mysql, Love PHP", "Mysql","MYSQL");
    //$ar = array('Mysql'=>'MYSQL','PHP'=>'php');
    //echo strtr("I Love Mysql, Love PHP", $ar);
    
    /*
    class myClass
    {
    
          public static function autoload($className)
          {                 
                if(is_file($className.".class.php"))
                {
                	require_once($className.".class.php");
    
                }else{
                	echo "{$className}类文件不存在!";
                }   
    
          }
    }
    spl_autoload_register(array('myClass','autoload'));
    $User = new User();
    echo $User->getUserName();
    echo "<BR><BR>";*/
    
    class Base
    {
    	  private $UserName;
    
    	  private $Password;
    
    	  public function __get($key)
          {
                return $this->$key;
          }
    
          public function __set($key, $val)
          {
          	   echo "key=={$key},val=={$val}<BR><BR>";
          	   $this->$key = $val;
          }
    
    
          public function __isset($key)
          {
               echo "<BR>===============call isset=============<BR>";
               return isset($this->$key);
          }
    
    
          public function __unset($key)
          {
               echo "<BR>===============call __unset=============<BR>";
               unset($this->$key);
    
          }
    }
    
    $base = new Base();
    $base->UserName = "xlc";
    $base->Password = "888888";
    $base->age = 22;
    echo "UserName:{$base->UserName}, Password:{$base->Password},age:{$base->age}<BR><BR>";
    
    
    echo "<BR><h1>age</h1><BR>";
    unset($base->age); //直接在类中没有声明的属性,在unset时,并不会调用魔术方法__unset()
    if(isset($base->age)) //但__isset()是进行调用的
    {
    	echo "存在";
    }else{
    	echo "不存在";
    }
    echo "<BR>=======================<BR>";
    
    
    
    echo "<BR><h1>Password</h1><BR>";
    unset($base->Password);    
    if(isset($base->Password))  //如果在类中定义了该属性,这里会调用两次__isset();
    {
    	echo "存在";
    }else{
    	echo "不存在";
    }
    
    echo "<BR><h1>UserName</h1><BR>";
    unset($base->UserName);
    if(isset($base->UserName))
    {
    	echo "存在";
    }else{
    	echo "不存在";
    }
    echo "<BR>=======================<BR>";
    
    //echo isset($base->$name) ? "property is setted.<br>" : "property is not setted.<br>"; 
    /*$key = "Userame";
    //当属性已经存在的情况下就不走__isset()了这是为何?
    //这里只有在$key为该对像已经定义的属性时才会调用__isset()魔术方法
    if(isset($base->$key))
    {
    	echo "属性存在";
    }else{
    	echo "属性不存在";
    }*/
    
    ?>
    

      

  • 相关阅读:
    VS2013 使用QCustomPlot等三方库如何配置
    error LNK1112:模块计算机类型"X64" 与目标计算机类型"X86" 冲突
    Qt 获取屏幕当前分辨率
    流程控制
    导航条和工作内容纪要
    js简介
    高度塌陷
    浮动
    文档流
    display和overflow
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/3150728.html
Copyright © 2020-2023  润新知