如果我有这段代码,则会回显字符串“test”。这是 PHP 5.3 中的内容。这是一些不应该依赖的疏忽,还是在 PHP 中实现多重继承的某种方式?
class Test1
{
function getName()
{
return $this->name;
}
}
class Test2
{
public $name = 'test';
function getName()
{
return Test1::getName();
}
}
$test = new Test2;
echo $test->getName();
EDIT:
正如 GZipp 的评论所指出的,这实际上是记录在案的行为。请参阅此页面:https://www.php.net/manual/en/language.oop5.basic.php https://www.php.net/manual/en/language.oop5.basic.php和标题“示例#2 $this 伪变量的一些示例”。
A 类和 B 类与我上面的两个测试类和行有类似的关系
$b = new B();
$b->bar();
显示与我的示例或多或少相同的结果。
需要澄清的是——这不是继承。 Test2 不扩展 Test1。您静态引用了 Test1 类的公共方法。
尽管如此,至少可以说,它返回“test”的事实很有趣。我明白它在哪里散发出继承的想法。
如果您找不到合适的答案,我会将您的代码作为错误提交。
UPDATE
看起来在幕后,即使您静态引用了 Test1 的方法,它仍然被称为 Test2。最后,这是未定义的行为,上面提到的询问确实会引发严格的警告。仍然很奇怪,我个人同意它不应该起作用。但只是为了更深入地了解它正在使用哪个对象。
class Test1 {
function getName() {
echo get_class($this);
return $this->name;
}
}
// ...
$test = new Test2;
echo $test->getName();
// echoes 'Test2 test'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)