php 静态方法问题

原创
2016-06-06 20:46:09 800浏览

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

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

回复内容:

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

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

__callStatic

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

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

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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。