Как узнать имя подкласса? Здравствуйте. Скажите как можно свойству $now класса Chief присваивать строку - имя подкласса (А или В или С) в которых в данный момент вызывается неопределенное свойство. То есть как класс Chief может знать имена своих подклассов в которых вызывается неопределенное свойство.error_reporting(E_ALL); class Chief { public $now; public function __get($name){ return $name; } } class A extends Chief { public function perf(){ return $this->pr_a; } } class B extends Chief { public function perf(){ return $this->pr_b; } } class C extends Chief { public function perf(){ return $this->pr_c; } } class Closing extends Chief { public $all = array('A','B','C'); public function perf(){ foreach($this->all as $v){ $aught = new $v; echo $aught->perf().''; } } } $res = new Closing(); print $res->perf();
Вы можете получить имя текущего класса, в котором вызывается неопределенное свойство, используя метод get_called_class(). Вот как вы можете изменить ваш код, чтобы свойству $now класса Chief присваивалось имя подкласса (A, B или C):
error_reporting(E_ALL); class Chief { public $now; public function __get($name){ $this->now = get_called_class(); return $name; } } class A extends Chief { public function perf(){ return $this->pr_a; } } class B extends Chief { public function perf(){ return $this->pr_b; } } class C extends Chief { public function perf(){ return $this->pr_c; } } class Closing extends Chief { public $all = array('A','B','C'); public function perf(){ foreach($this->all as $v){ $aught = new $v; $this->now = get_called_class(); echo $aught->perf().'<br>'; } } } $res = new Closing(); print $res->perf();
Теперь при вызове неопределенного свойства в подклассах A, B или C, свойству $now класса Chief будет присвоено имя подкласса, в котором это свойство было вызвано.
Вы можете получить имя текущего класса, в котором вызывается неопределенное свойство, используя метод get_called_class(). Вот как вы можете изменить ваш код, чтобы свойству $now класса Chief присваивалось имя подкласса (A, B или C):
error_reporting(E_ALL);class Chief
{
public $now;
public function __get($name){
$this->now = get_called_class();
return $name;
}
}
class A extends Chief
{
public function perf(){
return $this->pr_a;
}
}
class B extends Chief
{
public function perf(){
return $this->pr_b;
}
}
class C extends Chief
{
public function perf(){
return $this->pr_c;
}
}
class Closing extends Chief
{
public $all = array('A','B','C');
public function perf(){
foreach($this->all as $v){
$aught = new $v;
$this->now = get_called_class();
echo $aught->perf().'<br>';
}
}
}
$res = new Closing();
print $res->perf();
Теперь при вызове неопределенного свойства в подклассах A, B или C, свойству $now класса Chief будет присвоено имя подкласса, в котором это свойство было вызвано.