我在使用php面向对象。
设计了一个类。其中我也实现了 __get和__set方法。
可是我发现一个问题,使用此两个方法获取和设置属性值时,如果类中不存在属性,是不给任务错误和警告的。
请问在PHP中哪个函数或操作符可以检测此类中有或没有该属性。我是想如果设置或获取属性值时,没有的话,我要警告无此属性。

解决方案 »

  1.   


    class T
    {
    var $strA = '';
    }
    $t = new T;
    if(isset($t->strA))
    {
    echo 'strA';//打印了
    }
    if(isset($t->strB))
    {
    echo 'strB';//不打印
    }
      

  2.   

    property_exists和楼上所说的isset不同的是:
    As opposed with isset(), property_exists() returns TRUE even if the property has the value NULL. 
      

  3.   


    的确,学习了property_exists
    (PHP 5 >= 5.1.0RC1)
    试了下,对于
    class T
    {
        var $strA    = '';
    }
    $t    = new T;
    $t->strB = '';//这种情况无效,但isset可以
      

  4.   

    isset or property_exists如果 我是想如果设置属性值时,没有的话,我要警告无此属性
    那么 __set 就没有必要存在了
      

  5.   


    class myClass {
        private $a;    function test($val) {
            if(property_exists('myClass', $val)){
    return true;
    }else{
    return false;
    }
        }    function test2(){
    if($this->test("a")){
    //你的处理
    }else{
    //你的处理
    }
        }
    }
      

  6.   

    你首先要知道它们在PHP里到底是做什么的???
    function __get($var_name){
    //当实例化对象后,调用了不存在的对象属性时执行(取值)
    //echo $Object->not_var
    if(isset($this->private_var[$var_name])) { 
    return($this->private_var[$var_name]); 
    }else{ 
    return(NULL); 
    }
    }

    function __set($var_name){
    //当实例化对象后,调用了不存在的对象属性时执行(赋值)
    //$Object->not_var1 = "1";
    if(isset($this->private_var[$var_name])) { 
    return($this->private_var[$var_name]); 
    }else{ 
    return(NULL); 
    }
    }
      

  7.   

    需要_get,_set吗?直接call $objectname->property不可以吗?
      

  8.   

    __get和__set方法
    本来就是调用了类不存在的属性的时候执行的。你给类加了__get和__set方法后,调用不存在的属性时,当然不会报错了。
    你可以直接在__get和__set方法里提示。你还可以直接把__get和__set方法删除了,那PHP就会自动报错了
      

  9.   


    <?php
    class className{
    function __construct(){

    }

    function __destruct(){

    }
    function __get($var_name){
    echo "类:".__CLASS__."的属性:{$var_name}不存在!你不能得到值";
    exit;
    }

    function __set($var_name){
    echo "类:".__CLASS__."的属性:{$var_name}不存在!你不能给其赋值";
    exit;
    }

    function __call($function_name, $args){
    print("类:".__CLASS__."的方法: $function_name()不存在!<br>\n"); 
    print("调用参数: "); 
    print_r($args); 
    exit;
    }
    }
    ?>