Php parent::是否自动确定类和对象调用上下文?

Php parent::是否自动确定类和对象调用上下文?,php,class,object,parent,Php,Class,Object,Parent,在第一种情况下,我们在对象上下文中调用函数。在第二种情况下,我们有类上下文。 父::是否会像这样工作,并根据上下文同时执行self class par_parent{ private $var='value1'; private static $val='value2'; public function call(){ var_dump('Object '.$this->var); } public static function s

在第一种情况下,我们在对象上下文中调用函数。在第二种情况下,我们有类上下文。 父::是否会像这样工作,并根据上下文同时执行self

class par_parent{
    private $var='value1';
    private static $val='value2';
    public function call(){
        var_dump('Object '.$this->var);
    }
    public static function staticCall(){
        var_dump('Static '.self::$val);
    }
}

class par_child extends par_parent{
    public function callObj(){
        parent::call();
    }

    public static function callStatic(){
        parent::staticCall();
    }
}



$obj=new par_child();
$obj->callObj();
**//string 'Object value1' (length=13)**
par_child::callStatic();
**//string 'Static value2' (length=13)**

父项:与关键字self::一样绑定,总是以代码方式查看定义它的上下文,而不是从调用它的位置,因此本质上它的工作方式类似于关键字self:。如果您需要它像
$this
一样工作,请使用提供的后期静态绑定
static::
。考虑这个例子:

class A { 
    protected static $v = 'a';
    public static function staticsay() {
        print static::$v;
    }

}
class B extends A { 
    protected static $v = 'b';
    public static function say(){
        print parent::$v;
    }
}
class C extends B { 
    protected static $v = 'c';
    public static function selfsay(){
        print parent::$v;
    }
} 

C::say(); // prints 'a'
C::selfsay(); // prints 'b'
C::staticsay(); // prints 'c'
这里我们调用
C
上的
say()
方法,它来自类
B
,因此它是
parent::
的意思是
A
,而
A::$v
是'A',所以它会打印出来

C
中的
parent::
指向类
B
,它将
$v
视为“B”


php 5.3提供了后期静态绑定和
static::
关键字,允许您访问基类静态方法中的
static
变量和方法,因此
A::staticsay
将从类
C

查看php文档中看到
$v
。是的,
父项:
必须在上下文中工作。如果没有上下文,它怎么知道哪个类是父类呢?我的问题是关于parent::如何在类和对象上下文中同时工作,比如$this->和self:。我在文档中找不到答案,但我的问题是关于parent::它与父类一起工作,比如$this->或者self::或者类似static::或者其他什么?