如何跟踪继承方法的来源

时间:2018-04-24 13:00:29

标签: php class oop object inheritance

考虑这个简单的类示例:

// 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 :(得分:1)

虽然看似微不足道,但必须循环父类的序列:

const

将输出如下内容:

address_t const * const * my_addrs;
// same as 
const address_t * const * my_addrs;  // More common

或者更简单,不尊重继承:

$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

答案 1 :(得分:0)

如果没有IDE(或许多文档),继承并不是最容易理解的。

PHPDoc确实有@see标记,您可以将其用作:

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

    $this->wallet();

}

除此之外,你想确保你的继承有意义。我确定这只是一个简单的例子,但我没有看到为什么女儿会伸出父亲的原因。

女儿可以伸出一个孩子,在孩子身上,你可以拥有从父母(或父亲)那里拉钱包的逻辑。