2010-09-22 60 views
1

我有两个类:例外而不注意

class Test { 
    public $name; 
} 

/*******/ 

class MyClass { 
    private $_test = NULL; 

    __get($name) 
    { 
    return $this->$name; 
    } 

    __set($name,$value) 
    { 
    $this->$name = $value; 
    } 
} 

而当我想用这种方式:

$obj1 = new MyClass(); 
$obj1->_test = new Test(); 
$obj1->_test->name = 'Test!'; 

一切正常。但它也有可能,有人会使用这种方式:

$obj1 = new MyClass(); 
$obj1->_test->name = 'Test!'; 

然后,我得到的通知“的通知:超载财产的MyClass间接修改:: $ _测试在/ not_important_path_here没有任何影响”。相反,通知我想抛出一个异常。怎么做?

回答

0

在你的__get()方法中,检查$ _test是否是Test的一个实例。如果是返回它,否则在__get()方法中抛出异常。

3

你在找什么是ErrorException对象。

function exception_error_handler($no, $str, $file, $line) { throw new ErrorException($str, 0, $no, $file, $line); } 
set_error_handler("exception_error_handler");