开发者社区> 问答> 正文

请教php 静态方法问题

screenshot

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

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

展开
收起
落地花开啦 2016-06-17 17:51:59 1972 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

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

    2019-07-17 19:43:21
    赞同 展开评论 打赏
问答分类:
PHP
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载