0

我有这种情况:

class A extends B {
   public function test() {
       parent::test();
   }
}

class B extends someCompletelyOtherClass {
   public function test() {
       //what is the type of $this here?
   } 
}

功能测试中 B 类中的 $this 是什么类型?甲还是乙?我试过它的A,我在想它的B?为什么是A?

谢谢!

4

3 回答 3

2

我不是 PHP 专家,但我认为这是有道理的。$this 应该指向 A 类型的实例化对象,即使该方法是在 B 类中定义的。

如果您创建 B 类的实例并直接调用它的测试方法,则 $this 应该指向 B 类型的对象。

于 2012-06-04T12:04:47.030 回答
0

问题是您正在test()静态调用,即在类上下文中。静态调用非静态函数是错误的(不幸的是,PHP 不强制执行此操作)。

你应该使用$this->test(),而不是parent::test()

于 2012-06-04T11:57:38.940 回答
-1

在 PHP 中,关键字“$this”用作类的自引用,您可以使用它来调用和使用类函数和变量。这是一个例子:

class ClassOne
{
    // this is a property of this class
    public $propertyOne;

    // When the ClassOne is instantiated, the first method called is
    // its constructor, which also is a method of the class
    public function __construct($argumentOne)
    {
        // this key word used here to assign
        // the argument to the class
        $this->propertyOne = $argumentOne;
    }

    // this is a method of the class
    function methodOne()
    {
        //this keyword also used here to use  the value of variable $var1
        return 'Method one print value for its '
             . ' property $propertyOne: ' . $this->propertyOne;
    }
}

当您调用 parent::test() 时,您实际上调用了与 CLASS B 关联的测试函数,因为您是静态调用它。尝试调用它 $this->test() 你应该得到 A 而不是 B。

于 2012-06-04T11:57:58.440 回答