考虑这个简单的类示例:
// 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)时,很快就能很快知道继承方法的来源。
答案 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();
}
除此之外,你想确保你的继承有意义。我确定这只是一个简单的例子,但我没有看到为什么女儿会伸出父亲的原因。
女儿可以伸出一个孩子,在孩子身上,你可以拥有从父母(或父亲)那里拉钱包的逻辑。