パブリック、プロテクト、プライベートの違い

WBOY
リリース: 2016-06-13 12:20:38
オリジナル
1123 人が閲覧しました

public、protected、private の違い

結論は className::functionNmae()、インスタンス化、親、self を通じて導き出されます

className::functionNmae() は静的である必要がありますMethod ( public モード)

parent::functionNmae() 親クラスは静的メソッドである必要があります (パブリック モードおよびプロテクト モード)

self :: functionNmae() このクラスは静的メソッドである必要があります (3 つのモード)

インスタンス化: インスタンス化後、パブリック モードで静的メソッドまたは通常のメソッドにアクセスできます

1. 直接アクセス (className::functionNmae() およびインスタンス化による):

結論:

| className::functionNmae を通じてアクセスできます。 ()
public
| インスタンス $obj->functionName() を通じてアクセス可能 | className::functionNmae() を通じてアクセス可能
protected
| インスタンス $obj->functionName() を通じてアクセス可能)

にアクセスします | className::functionNmae()
private
を通じてアクセスできません $obj->functionName()

<?<span style="color: #000000;">php</span><span style="color: #008000;">/*</span><span style="color: #008000;">* *  * @authors HG ([email&#160;protected]) * @date    2015-05-26 17:12:02 * @version 1.0 </span><span style="color: #008000;">*/</span><span style="color: #008080;">header</span>("Content-type:text/html;charset=utf-8"<span style="color: #000000;">);</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> A {    </span><span style="color: #0000ff;">static</span> <span style="color: #800080;">$name</span>='这是类A的静态变量'<span style="color: #000000;">;    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> stc_pc(){        </span><span style="color: #0000ff;">echo</span> '这是类A的公共静态方法<br />'<span style="color: #000000;">;    }    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> stc(){        </span><span style="color: #0000ff;">echo</span> '这是类A的静态方法<br />'<span style="color: #000000;">;    }    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> stc_pd(){        </span><span style="color: #0000ff;">echo</span> '这是类A受保护的静态方法<br />'<span style="color: #000000;">;    }    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> stc_pe(){        </span><span style="color: #0000ff;">echo</span> '这是类A私有的静态方法<br />'<span style="color: #000000;">;    }}A</span>::stc_pc();<span style="color: #008000;">//</span><span style="color: #008000;">可访问</span><span style="color: #000000;">A</span>::stc();<span style="color: #008000;">//</span><span style="color: #008000;">可访问</span><span style="color: #000000;">A</span>::<span style="color: #800080;">$name</span>;<span style="color: #008000;">//</span><span style="color: #008000;">不报错//A::stc_pd();//不可访问//A::stc_pe();//不可访问</span><span style="color: #0000ff;">echo</span> '<br><br>通过实例化访问<br><br>'<span style="color: #000000;">;</span><span style="color: #800080;">$a</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> A();</span><span style="color: #800080;">$a</span>->stc_pc();<span style="color: #008000;">//</span><span style="color: #008000;">可访问</span><span style="color: #800080;">$a</span>->stc();<span style="color: #008000;">//</span><span style="color: #008000;">可访问//$a->$name;//报错//$a->stc_pd();//不可访问//$a->stc_pe();//不可访问</span><span style="color: #008000;">/*</span><span style="color: #008000;">*******************          | 可以 通过 className::functionNmae() 访问public    |           | 可以 通过实例 $obj->functionName() 访问                  | 不可 通过 className::functionNmae() 访问protected |           | 不可 通过实例 $obj->functionName() 访问              | 不可 通过 className::functionNmae() 访问private   |           | 不可 通过实例 $obj->functionName() 访问    *******************</span><span style="color: #008000;">*/</span>
ログイン後にコピー
2. 直接アクセス (self::functionNmae())

結論:

self::functionNmae(); 3 つのモードすべてが使用可能です。 🎜>

<?<span style="color: #000000;">php</span><span style="color: #008000;">/*</span><span style="color: #008000;">* *  * @authors HG ([email protected]) * @date    2015-05-26 17:18:50 * @version 1.0 </span><span style="color: #008000;">*/</span><span style="color: #008080;">header</span>("Content-type:text/html;charset=utf-8"<span style="color: #000000;">);</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> C {    </span><span style="color: #0000ff;">static</span> <span style="color: #800080;">$name</span> = "静态变量"<span style="color: #000000;">;      </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> stc_pc(){                </span><span style="color: #0000ff;">echo</span> '静态公共方法<br>'<span style="color: #000000;">;        self</span>::<span style="color: #000000;">stc_pd();        self</span>::<span style="color: #000000;">stc_pe();        self</span>::<span style="color: #000000;">stc();        </span><span style="color: #008000;">//</span><span style="color: #008000;">self::func();//报错但有结果</span><span style="color: #000000;">            }    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> stc_pd(){        </span><span style="color: #0000ff;">echo</span> '静态受保护方法<br>'<span style="color: #000000;">;    }    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> stc_pe(){                </span><span style="color: #0000ff;">echo</span> '静态受保护方法<br>'<span style="color: #000000;">;    }    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> stc(){                </span><span style="color: #0000ff;">echo</span> '静态普通方法<br>'<span style="color: #000000;">;    }    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> func(){                </span><span style="color: #0000ff;">echo</span> '普通方法<br>'<span style="color: #000000;">;    }    }C</span>::<span style="color: #000000;">stc_pc();</span><span style="color: #008000;">/*</span><span style="color: #008000;">*****self::functionNmae();需是静态方法(三种模式都可)*****</span><span style="color: #008000;">*/</span>
ログイン後にコピー
3. サブクラス (parent::functionNmae() とインスタンス化) を介して親クラスにアクセスします。

結論:

parent::functionNmae(); プライベートにアクセスできません

$obj->functionNmae(); プライベートにアクセスできません


4.

<?<span style="color: #000000;">php</span><span style="color: #008000;">/*</span><span style="color: #008000;">* *  * @authors HG ([email protected]) * @date    2015-05-26 17:18:50 * @version 1.0 </span><span style="color: #008000;">*/</span><span style="color: #008080;">header</span>("Content-type:text/html;charset=utf-8"<span style="color: #000000;">);</span><span style="color: #0000ff;">include</span> '/class_a.php'<span style="color: #000000;">;</span><span style="color: #0000ff;">class</span> B <span style="color: #0000ff;">extends</span><span style="color: #000000;"> A{        </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> index(){                parent</span>::<span style="color: #000000;">stc_pc();        parent</span>::<span style="color: #000000;">stc();        parent</span>::<span style="color: #000000;">stc_pd();        parent</span>::<span style="color: #800080;">$name</span>;<span style="color: #008000;">//</span><span style="color: #008000;">不报错        //parent::stc_pe();//不可访问</span>        <span style="color: #0000ff;">echo</span> '<br><br>通过实例化访问<br><br>'<span style="color: #000000;">;        </span><span style="color: #800080;">$a</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> A();        </span><span style="color: #800080;">$a</span>-><span style="color: #000000;">stc_pc();        </span><span style="color: #800080;">$a</span>-><span style="color: #000000;">stc();        </span><span style="color: #800080;">$a</span>-><span style="color: #000000;">stc_pd();        </span><span style="color: #800080;">$a</span>-><span style="color: #800080;">$name</span>;<span style="color: #008000;">//</span><span style="color: #008000;">报错        //$a->stc_pe();//不可</span><span style="color: #000000;">    }    }B</span>::<span style="color: #000000;">index();</span><span style="color: #008000;">/*</span><span style="color: #008000;">*****在子类中通过:parent::functionNmae(); private不可访问$obj->functionNmae(); private不可访问*****</span><span style="color: #008000;">*/</span>
ログイン後にコピー

<?<span style="color: #000000;">php</span><span style="color: #008000;">/*</span><span style="color: #008000;">* *  * @authors HG ([email&#160;protected]) * @date    2015-05-28 11:54:03 * @version 1.0 </span><span style="color: #008000;">*/</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> functioninc{    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> fc_a(){        </span><span style="color: #0000ff;">echo</span> '000  '<span style="color: #000000;">;    }    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> fc_b(){        </span><span style="color: #0000ff;">echo</span> '111   '<span style="color: #000000;">;      }    }</span><span style="color: #0000ff;">class</span> fun <span style="color: #0000ff;">extends</span><span style="color: #000000;"> functioninc {    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> a(){        parent</span>::fc_a(); <span style="color: #008000;">//</span><span style="color: #008000;">报错 fc_a()不是静态方法</span>        parent::<span style="color: #000000;">fc_b();    }    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> b(){        parent</span>::<span style="color: #000000;">fc_a();        parent</span>::<span style="color: #000000;">fc_b();    }}</span><span style="color: #008000;">/*</span><span style="color: #008000;">在子类中静态方法通过parent调用父类方法,父类方法需是静态方法。普通方法通过parent调用父类方法,不限制。</span><span style="color: #008000;">*/</span><span style="color: #800080;">$a</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> fun();</span><span style="color: #800080;">$a</span>-><span style="color: #000000;">a();</span><span style="color: #800080;">$a</span>->b();
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!