2010-09-22 2 views
1

У меня есть два класса:Exception вместо Обратите внимание

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"); 
Смежные вопросы