PHP 之 this self parent static 对比

WBOY
リリース: 2016-06-06 19:40:38
オリジナル
1405 人が閲覧しました

this 绑定的是当前已经实例化的对象 这样长出现的问题: 如果你在一个父类中使用$this调用当前一个类的方法或者属性,如果这个类被继承,且在相应的子类中有调用的属性或者方法是,则父类中的$this调用的方法或者属性会使用子类中的方法。 ? php class basePa

this 绑定的是当前已经实例化的对象

这样长出现的问题: 如果你在一个父类中使用$this调用当前一个类的方法或者属性,如果这个类被继承,且在相应的子类中有调用的属性或者方法是,则父类中的$this调用的方法或者属性会使用子类中的方法。

<span>php               
                    
</span><span>class</span><span> baseParent    
{                   
    </span><span>static</span> <span>$counter</span> = 0<span>;
    </span><span>function</span><span> getName()
    {               
        </span><span>return</span> 'baseParent'<span>;
    }               
                    
    </span><span>function</span><span> printName()
    {               
        </span><span>echo</span> <span>$this</span>->getName() . "\n"<span>;                                                                                                                        
    }               
}                   
                    
</span><span>class</span> base <span>extends</span><span> baseParent
{                   
    </span><span>static</span> <span>$counter</span> = 0<span>;
    </span><span>function</span><span> addCounter()
    {               
        </span><span>return</span> self::<span>$counter</span> +=1<span>;
    }               
                    
    </span><span>function</span><span> getName()
    {               
        </span><span>return</span> 'base'<span>;
    }               
                    
}                   
                    
</span><span>$one</span> = <span>new</span><span> base();  
</span><span>$one</span>->printName();
ログイン後にコピー

输出: base


parent 指向当前对象的父类的

self 指向当前类本身的,不指向任何已经实例化的对象的,一般用于指向类中的静态变量和静态方法: 因为静态方法和静态的变量是不能实例化到对象当中的,它只存在于当前类中

<span>php
</span><span>class</span><span> baseParent         
{
    </span><span>static</span> <span>$counter</span> = 0<span>;
}

</span><span>class</span> base <span>extends</span><span> baseParent
{
</span><span>function</span><span> addCounter()
    {
        </span><span>return</span> self::<span>$counter</span> +=1<span>;
    }
}

</span><span>$one</span> = <span>new</span><span> base();
</span><span>echo</span> <span>$one</span>->addCounter() . "\n"<span>;

</span><span>$two</span> = <span>new</span><span> base();
</span><span>echo</span> <span>$two</span>->addCounter() . "\n"<span>;

</span><span>echo</span> baseParent::<span>$counter</span>;
ログイン後にコピー

输出:1 2 2

static 后期静态绑定:
    static::不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为"静态绑定",
因为它可以用于(但不限于)静态方法的调用。

<span>php
</span><span>class</span><span> baseParent    
{                   
    </span><span>static</span> <span>$counter</span> = 0<span>;
    </span><span>function</span><span> getName()
    {               
        </span><span>return</span> 'baseParent'<span>;
    }               
 
    </span><span>function</span><span> printName()
    {               
        </span><span>echo</span> <span>static</span>::getName() . "\n"<span>;
    }
}                   

</span><span>class</span> base <span>extends</span><span> baseParent
{                   
    </span><span>static</span> <span>$counter</span> = 0<span>;
    </span><span>function</span><span> addCounter()
    {               
        </span><span>return</span> self::<span>$counter</span> +=1<span>;
    }

    </span><span>function</span><span> getName()
    {               
        </span><span>return</span> 'base'<span>;                                                                                                                                       
    }               

}

</span><span>$one</span> = <span>new</span><span> base();  
</span><span>$one</span>->printName();
ログイン後にコピー

 输出: base

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート