php 静态方法问题

WBOY
Libérer: 2016-06-06 20:46:09
original
1277 Les gens l'ont consulté

php 静态方法问题

<code>    private function getlong() {
    $result = unpack('Vlong', fread(self::$fp, 4));
    return $result['long'];
}
</code>
Copier après la connexion
Copier après la connexion

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

回复内容:

php 静态方法问题

<code>    private function getlong() {
    $result = unpack('Vlong', fread(self::$fp, 4));
    return $result['long'];
}
</code>
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion

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

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal