如果我有此代码,则会回显字符串“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 的评论所指出的,这实际上是记录在案的行为。查看此页面:http://us2.php.net/manual/en/language.oop5.basic.php和标题“Example #2 Some examples of the $this pseudo-variable”。
A 类和 B 类与我上面的两个测试类和行有类似的关系
$b = new B();
$b->bar();
显示与我的示例大致相同的结果。
最佳答案
需要说明的是——这不是继承。 Test2 不扩展 Test1。您静态引用了 Test1 类的公共(public)方法。
尽管如此,它返回“测试”的事实至少可以说是有趣的。我看到它在哪里散发出继承的想法。
如果您找不到合适的答案,我会将您的代码作为错误提交。
更新
看起来在幕后,即使您静态引用了 Test1 的方法,它仍然被称为 Test2。最后,这是未定义的行为,上面提到的 ask 确实会抛出一个严格的警告。仍然很奇怪,我个人同意它不应该工作。但只是为了更深入地了解它正在使用哪个对象。
class Test1 {
function getName() {
echo get_class($this);
return $this->name;
}
}
// ...
$test = new Test2;
echo $test->getName();
// echoes 'Test2 test'
关于php - 带有类的 PHP 中发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3845769/