【发布时间】:2010-10-02 12:49:00
【问题描述】:
如果我有此代码,则会回显字符串“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();
编辑:
正如 GZipp 指出的 cmets,这实际上是记录在案的行为。请参阅此页面:http://us2.php.net/manual/en/language.oop5.basic.php 和标题“示例 #2 $this 伪变量的一些示例”。
A 类和 B 类与我上面的两个测试类和行的关系相似
$b = new B();
$b->bar();
显示与我的示例大致相同的结果。
【问题讨论】:
-
WTH?这确实有效! (我试过了)......它不应该(基于 PHP 的继承规则和静态调用)。对
Test1::getName()的调用确实会产生E_STRICT错误,但是如果您有error_reporting 以不显示严格的错误,它可以工作......我想你偶然发现了一个错误......但话又说回来,它也适用于5.2。 .. 很奇怪... -
我会说这是一个错误.....我预计 100% 的回报将是
NULL -
如果您愿意,可以将其称为错误,但这是记录在案的行为。 us2.php.net/manual/en/language.oop5.basic.php
-
好吧,如果这真的被人知道并记录在案,我必须得出这样的结论:PHP 在这一点上确实很烂。
标签: php oop inheritance