zoukankan      html  css  js  c++  java
  • __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 "属性不存在";
    }*/
    
    ?>
    

      

  • 相关阅读:
    二、java 与 scala相互调用
    Gradle Tips#1-tasks
    Guice 学习(六)使用Provider注入服务( Provider Inject Service)
    C++第15周(春)项目3
    cocos2d-x3.2中怎样优化Cocos2d-X游戏的内存
    jqGrid源代码分析(一)
    OCP-1Z0-051-题目解析-第6题
    PHP连接sql server 2005环境配置
    【剑指offer】替换字符串中的空格
    android 推断Apk是否签名和 签名是否一致
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/3150728.html
Copyright © 2011-2022 走看看