в основном я использую PHP Overloading для создания динамических методов и свойств. Я хочу вызвать функцию для доступа к свойству, но сохранить доступ к его методам.
Другими словами, это мой 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
Спасибо, помощь будет очень признательна!
Когда вы создаете экземпляр первого класса, вы создаете $this->_instance
вместо $obj->instance
, So $obj->instance
будет null
и не могу ничего назвать по этому поводу.
Но если вы попробуете $obj->_instance->method();
, это будет также плохо, потому что _instance
это личное. Так что вам нужно добавить геттер. Попробуй это:
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
Других решений пока нет …