Heim > Backend-Entwicklung > PHP-Tutorial > public、protected、private的差别

public、protected、private的差别

WBOY
Freigeben: 2016-06-13 12:20:38
Original
1158 Leute haben es durchsucht

public、protected、private的区别

通过className::functionNmae()、实例化、parent、self得出结论

className::functionNmae()  需是静态方法(public模式)

parent::functionNmae() 父类需是静态方法(public、protected两种模式)

self::functionNmae() 该类需是静态方法(三种模式)

实例化:实例化后可访问public模式的静态方法或普通方法

 

一、直接访问(通过 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 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>
Nach dem Login kopieren

二、直接访问(self::functionNmae())

结论:

self::functionNmae();需是静态方法(三种模式都可)

<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>
Nach dem Login kopieren

 

三、通过子类访问父类(parent::functionNmae()和实例化)

结论:

parent::functionNmae(); private不可访问
$obj->functionNmae(); private不可访问

<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>
Nach dem Login kopieren

 四、

<span style="color: #000000;">php</span><span style="color: #008000;">/*</span><span style="color: #008000;">* *  * @authors HG ([email 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();
Nach dem Login kopieren

 

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage