Gnu*_*fo1 7 php oop inheritance
如果我有这个代码,则回显字符串"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();
Run Code Online (Sandbox Code Playgroud)
编辑:
正如已经指出GZipp的评论,这实际上是记录在案的行为.参见本页:http://us2.php.net/manual/en/language.oop5.basic.php和标题"Example#2 $ this伪变量的一些例子".
类A和B与我上面的两个测试类和行有类似的关系
$b = new B();
$b->bar();
Run Code Online (Sandbox Code Playgroud)
显示与我的示例相同或多或少的结果.
需要澄清的是——这不是继承。Test2 不扩展 Test1。您静态引用了 Test1 类的公共方法。
尽管如此,至少可以说,它返回“test”的事实很有趣。我明白它在哪里散发出继承的想法。
如果您找不到合适的答案,我会将您的代码作为错误提交。
看起来在幕后,即使您静态引用了 Test1 的方法,它仍然被称为 Test2。最后,这是未定义的行为,上面提到的询问确实会引发严格的警告。仍然很奇怪,我个人同意它不应该起作用。但只是为了更深入地了解它正在使用哪个对象。
class Test1 {
function getName() {
echo get_class($this);
return $this->name;
}
}
// ...
$test = new Test2;
echo $test->getName();
// echoes 'Test2 test'
Run Code Online (Sandbox Code Playgroud)