基本上我使用PHP重载来创建动态方法和属性。我想要做的是触发属性访问的功能,但保持对其方法的访问。
换句话说,这是我的PHP代码:
头等舱:
class _class {
private $_instance;
public function __construct() {
$this->_instance = new _object();
}
public function __get($name) {
switch ($name) {
case "instance":
//LOGICS
break;
}
return null;
}
}
第二课程:
class _object {
public function __call($method, $args) {
switch ($method) {
case "method":
//LOGICS
break;
}
return null;
}
}
现在我想以这种方式访问对象属性时执行一个函数:
$obj = new _class();
echo $obj->instance; //some output here, executing a function
echo $obj->instance->method(); //different output, executing the method of the instance
谢谢,非常感谢您的帮助!
答案 0 :(得分:0)
当您实例化第一个类时,则创建$this->_instance
而不是$obj->instance
。 So $obj->instance
将为null
,并且无法对此进行任何调用。
但是,如果你尝试$obj->_instance->method();
,那也会很糟糕,因为_instance
是私有的。所以你需要添加getter。试试这个:
class _class {
private $_instance;
public function __construct() {
$this->_instance = new _object();
}
public function __get($name) {
switch ($name) {
case "instance":
echo "Instance";
break;
}
return null;
}
public function getInstance() {
return $this->_instance;
}
}
class _object {
public function __call($method, $args) {
switch ($method) {
case "method":
echo "Method";
break;
}
return null;
}
}
$obj = new _class();
$obj->instance;
$obj->getInstance()->method();
输出是:
Instance
Method