Как вы отслеживаете, откуда унаследован метод - PullRequest
0 голосов
/ 24 апреля 2018

Рассматривая этот простой пример классов:

// Father.php

class father {
    public function wallet () {}
}

// mother.php

class mother extends father { }

// daughter.php

class daughter extends mother { 

    public function shop {

        $this->wallet();

    }   
}

Существует ли соглашение / практика кодирования, которая быстро говорит вам, что wallet() происходит из класса father?

Это не имеет большого значения, но при просмотре старого кода (безIDE) приятно знать быстро, откуда берутся унаследованные методы.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Хотя это, казалось бы, тривиально, нужно перебрать последовательность родительских классов:

$seekMethod = 'wallet';
$stack = [];
foreach(class_parents('daughter') as $parent){
    foreach((new ReflectionClass($parent))->getMethods() as $method){
        if($seekMethod == $method->name){
            $stack[] = "{$method->class}::{$method->name}() in {$parent}";
            echo "Found ".end($stack);
        }
    }
}

echo "{$seekMethod} is defined in ".end($stack);

Будет выводить что-то вроде:

Found father::wallet() in mother 
Found father::wallet() in father 
wallet is defined in father::wallet() in father

Или проще, без учета наследования:

foreach((new ReflectionClass('daughter'))->getMethods() as $method){
    if($seekMethod == $method->name){
        echo "Found {$method->class}::{$method->name}";
    }
}

Будет выводить, например,

Found father::wallet
0 голосов
/ 24 апреля 2018

Наследование - не самое простое решение без IDE (или большого количества документации).

PHPDoc имеет тег @see, который вы можете использовать как:

/**
* @see father::wallet()   For logic pertaining to wallet retrieval
*/
public function shop {

    $this->wallet();

}

Кроме того, вы хотите убедиться, что ваше наследство имеет смысл. Я уверен, что это был лишь быстрый пример, но я не вижу причин, почему дочь когда-либо могла бы расширить отца.

Дочь может продлить ребенка, а у ребенка вы можете иметь логику, касающуюся вытягивания кошелька у родителя (или отца).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...