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:: 的方式调用.