Home > Article > Backend Development > The difference between public, protected and private
Draw conclusions through className::functionNmae(), instantiation, parent, self
className::functionNmae() needs to be a static method (public mode)
parent::functionNmae() The parent class needs to be static Methods (two modes, public and protected)
self::functionNmae() This class must be a static method (three modes)
Instantiation: After instantiation, you can access static methods or ordinary methods in public mode
1. Direct access (through className::functionNmae() and instantiation):
Conclusion:
‐ using using using using using using ’s out of ’s ’s to be accessible through className::functionNmae()-- ) Access
private
| >functionName() access
<?<span>php </span><span>/*</span><span>* * * @authors HG (hg0728@qq.com) * @date 2015-05-26 17:12:02 * @version 1.0 </span><span>*/</span><span>header</span>("Content-type:text/html;charset=utf-8"<span>); </span><span>class</span><span> A { </span><span>static</span><span>$name</span>='这是类A的静态变量'<span>; </span><span>static</span><span>public</span><span>function</span><span> stc_pc(){ </span><span>echo</span> '这是类A的公共静态方法<br />'<span>; } </span><span>static</span><span>function</span><span> stc(){ </span><span>echo</span> '这是类A的静态方法<br />'<span>; } </span><span>static</span><span>protected</span><span>function</span><span> stc_pd(){ </span><span>echo</span> '这是类A受保护的静态方法<br />'<span>; } </span><span>static</span><span>private</span><span>function</span><span> stc_pe(){ </span><span>echo</span> '这是类A私有的静态方法<br />'<span>; } } A</span>::stc_pc();<span>//</span><span>可访问</span><span>A</span>::stc();<span>//</span><span>可访问</span><span>A</span>::<span>$name</span>;<span>//</span><span>不报错 //A::stc_pd();//不可访问 //A::stc_pe();//不可访问</span><span>echo</span> '<br><br>通过实例化访问<br><br>'<span>; </span><span>$a</span> = <span>new</span><span> A(); </span><span>$a</span>->stc_pc();<span>//</span><span>可访问</span><span>$a</span>->stc();<span>//</span><span>可访问 //$a->$name;//报错 //$a->stc_pd();//不可访问 //$a->stc_pe();//不可访问</span><span>/*</span><span>******************* | 可以 通过 className::functionNmae() 访问 public | | 可以 通过实例 $obj->functionName() 访问 | 不可 通过 className::functionNmae() 访问 protected | | 不可 通过实例 $obj->functionName() 访问 | 不可 通过 className::functionNmae() 访问 private | | 不可 通过实例 $obj->functionName() 访问 *******************</span><span>*/</span>
self::functionNmae(); needs to be a static method (all three modes are available)
<?<span>php </span><span>/*</span><span>* * * @authors HG (hg0728@qq.com) * @date 2015-05-26 17:18:50 * @version 1.0 </span><span>*/</span><span>header</span>("Content-type:text/html;charset=utf-8"<span>); </span><span>class</span><span> C { </span><span>static</span><span>$name</span> = "静态变量"<span>; </span><span>static</span><span>public</span><span>function</span><span> stc_pc(){ </span><span>echo</span> '静态公共方法<br>'<span>; self</span>::<span>stc_pd(); self</span>::<span>stc_pe(); self</span>::<span>stc(); </span><span>//</span><span>self::func();//报错但有结果</span><span> } </span><span>static</span><span>protected</span><span>function</span><span> stc_pd(){ </span><span>echo</span> '静态受保护方法<br>'<span>; } </span><span>static</span><span>private</span><span>function</span><span> stc_pe(){ </span><span>echo</span> '静态受保护方法<br>'<span>; } </span><span>static</span><span>function</span><span> stc(){ </span><span>echo</span> '静态普通方法<br>'<span>; } </span><span>function</span><span> func(){ </span><span>echo</span> '普通方法<br>'<span>; } } C</span>::<span>stc_pc(); </span><span>/*</span><span>***** self::functionNmae();需是静态方法(三种模式都可) *****</span><span>*/</span>
3. Access the parent class through subclasses (parent::functionNmae() and instantiation)
Conclusion:
parent::functionNmae(); private is not accessible
$obj->functionNmae(); private is not accessible<?<span>php </span><span>/*</span><span>* * * @authors HG (hg0728@qq.com) * @date 2015-05-26 17:18:50 * @version 1.0 </span><span>*/</span><span>header</span>("Content-type:text/html;charset=utf-8"<span>); </span><span>include</span> '/class_a.php'<span>; </span><span>class</span> B <span>extends</span><span> A{ </span><span>static</span><span>public</span><span>function</span><span> index(){ parent</span>::<span>stc_pc(); parent</span>::<span>stc(); parent</span>::<span>stc_pd(); parent</span>::<span>$name</span>;<span>//</span><span>不报错 //parent::stc_pe();//不可访问</span><span>echo</span> '<br><br>通过实例化访问<br><br>'<span>; </span><span>$a</span> = <span>new</span><span> A(); </span><span>$a</span>-><span>stc_pc(); </span><span>$a</span>-><span>stc(); </span><span>$a</span>-><span>stc_pd(); </span><span>$a</span>-><span>$name</span>;<span>//</span><span>报错 //$a->stc_pe();//不可</span><span> } } B</span>::<span>index(); </span><span>/*</span><span>***** 在子类中通过: parent::functionNmae(); private不可访问 $obj->functionNmae(); private不可访问 *****</span><span>*/</span>
The above has introduced the differences between public, protected, and private, including aspects of the content. I hope it will be helpful to friends who are interested in PHP tutorials.