Я думаю, это странное поведение, но если это не так, это, безусловно, недостаток функции PHP или, пожалуйста, скажите мне, как я могу это сделать.Возвращаемое значение функции, вызываемой с помощью __call
Это мои коды:
child.php
class child extends father {
public $name = "John Borned";
public function __construct($name) {
parent::__construct($name);
}
public function __call($function, $params){
$this->surname = "child call surname";
parent::__call($function, $params);
call_user_func_array(array($this, $function),$params);
}
protected function nameIt($name) {
$this->name = $name;
return $this->surname;
}
}
father.php
class father {
public $name;
public $surname = "Roe";
public function __construct($name) {
$this->name = $name;
}
public function __call($function,$params) {
$this->surname = "father call surname";
}
}
и dummy.php
include("father.php");
include("child.php");
$c = new child("Jane");
$n = $c->nameIt("Jane");
var_dump($n);
Это проблема: Вторя $this->surname
в функции nameIt, и значение «фамилия отца». Ничего страшного. Но var_dump($n);
говорит NULL
если функция nameIt попытается вернуть $this->surname
. Зачем? Почему я не могу вернуть значение с protected function nameIt
? Как эта функция может вернуть значение?
PS: Эти классы и их использование - всего лишь мимесис моего реального намерения. Поэтому, пожалуйста, не говорите, что вы многословны.
Спасибо.
Спасибо. Оно работает. Как ни странно. Но мне нужно больше объяснений, чтобы понять, как это работает. – musa
Добавлено несколько слов. Что именно неясно? –
Все ясно. Спасибо @ Ушаков – musa