这里有什么PHP课程?

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)

显示与我的示例相同或多或少的结果.

Jas*_*ary 1

需要澄清的是——这不是继承。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)