异常而非通知

时间:2010-09-22 15:12:13

标签: php oop

我有两个班级:

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 :: $ _ test对/ not_important_path_here没有影响”。而是通知我想要抛出异常。怎么做?

2 个答案:

答案 0 :(得分:4)

您正在寻找的是ErrorException对象。

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

答案 1 :(得分:0)

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