Heim >Backend-Entwicklung >PHP-Tutorial >php 静态方法问题

php 静态方法问题

WBOY
WBOYOriginal
2016-06-06 20:46:091296Durchsuche

php 静态方法问题

<code>    private function getlong() {
    $result = unpack('Vlong', fread(self::$fp, 4));
    return $result['long'];
}
</code>

getlong 非静态方法
为什么在getClientLocation
里可以用self::getlong() 访问

回复内容:

php 静态方法问题

<code>    private function getlong() {
    $result = unpack('Vlong', fread(self::$fp, 4));
    return $result['long'];
}
</code>

getlong 非静态方法
为什么在getClientLocation
里可以用self::getlong() 访问

__callStatic

其实php的设计是可以用::方式调用实例方法,这个涉及到scope引用问题,例如:

<code class="lang-php">class A
{
    public $a;
    public function echo()
    {
        //标识为A.a
        $this->a = 'A.a';
        echo $this->a;
    }
}
Class B
{
    public $a;
    public function test()
    {
        //标识为B.a
        $this->a = 'B.a';
        //静态调用A的echo方法
        A::echo();
    }
}
//这里要不能用::调用,不然会出现context错误,因为这里要找到$this.
$b = new B();
$b->test();
//结果是:B.a
</code>

结果不是A.a的原因是scope,因为静态调用使得A的echo方法里的$this即scope指向了B,所以$this是指B实例,
为什么php会有这样的设计?因为 parent::foo();记得了吧,子类调用父类方法的时候,就是用parent:: 的方式调用.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn