<code> private function getlong() { $result = unpack('Vlong', fread(self::$fp, 4)); return $result['long']; } </code>
getlong 非静态方法
为什么在getClientLocation
里可以用self::getlong() 访问
<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:: 的方式调用.