首页 > 后端开发 > php教程 > php 静态方法问题

php 静态方法问题

WBOY
发布: 2016-06-06 20:46:09
原创
1295 人浏览过

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

相关标签:
php
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板