2010-09-22 70 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");