@bizzonaru

Почему нельзя вызвать __call из родительского класса?

Есть такой код:
class A {

    public function __call($method, $args) {
        echo " A => ".$method."  ".implode(',', $args)."\n";
    }

}

class B extends A {

    public function __call($method, $args) {
        echo " B => ".$method."  ".implode(',', $args)."\n";   
    } 

    public function me() {
        parent::test(1,3);
    } 
}

$b = new B();
$b->me();


При выполнении, получается, что зовется call от дочернего класса B, почему?

B => test 1,3
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 2
rdifb0
@rdifb0
Программист, реалист
При выполнении, получается, что зовется call от дочернего класса B, почему?

Потому что вы его переопределили? Как вы себе представляете наследование с переопределением, если бы предки всегда вызывали только свои методы? Каждый вызов метода проходит всю цепочку наследования по новой.
Ответ написан
Комментировать
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
На то они и магические методы, чтоб работали магически.
Видимо у магии своя специфика работы/наследования.
Почему не нашел, "решение" нашёл.

<?php
class A {

    public function __call($method, $args) {
        echo " A => ".$method."  ".implode(',', $args)."\n";
    }

}

class B extends A {

    public function __call($method, $args) {
        echo " B => ".$method."  ".implode(',', $args)."\n";   
    } 

    public function me() {
        parent::__call('test', [1,3]);
    } 
}

$b = new B();
$b->me();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы