php class中public,private,protected的区别以及实例分析


Posted in PHP onJune 18, 2013

一,public,private,protected的区别
public:权限是最大的,可以内部调用,实例调用等。
protected: 受保护类型,用于本类和继承类调用。
private: 私有类型,只有在本类中使用。

二,实例

<?php
error_reporting(E_ALL);
class test{
 public $public;
 private $private;
 protected $protected;
 static $instance;
 public  function __construct(){
 $this->public    = 'public     <br>';
 $this->private   = 'private    <br>';
 $this->protected = 'protected  <br>';
 }
 static function tank(){
 if (!isset(self::$instance[get_class()]))
 {
 $c = get_class();
 self::$instance = new $c;
 }
 return self::$instance;
 }    
 public function pub_function() {
 echo "you request public function<br>";
 echo $this->public;
 echo $this->private;        //private,内部可以调用
 echo $this->protected;      //protected,内部可以调用
 $this->pri_function();      //private方法,内部可以调用
 $this->pro_function();      //protected方法,内部可以调用
 }
 protected  function pro_function(){
 echo "you request protected function<br>";
 }
 private function pri_function(){
 echo "you request private function<br>";
 }
}
$test = test::tank();
echo $test->public;
echo $test->private;    //Fatal error: Cannot access private property test::$private
echo $test->protected;  //Fatal error: Cannot access protected property test::$protected
$test->pub_function();
$test->pro_function();  //Fatal error: Call to protected method test::pro_function() from context
$test->pri_function();  //Fatal error: Call to private method test::pri_function() from context
?>

从上面的例子中,我们可以看出,
public:    可以class内部调用,可以实例化调用。
private:   可以class内部调用,实例化调用报错。
protected:  可以class内部调用,实例化调用报错。
<?php
class test{
 public $public;
 private $private;
 protected $protected;
 static $instance;
 public  function __construct(){
 $this->public    = 'public     <br>';
 $this->private   = 'private    <br>';
 $this->protected = 'protected  <br>';
 }
 protected function tank(){                          //私有方法不能继承,换成public,protected
 if (!isset(self::$instance[get_class()]))
 {
 $c = get_class();
 self::$instance = new $c;
 }
 return self::$instance;
 }    
 public function pub_function() {
 echo "you request public function<br>";
 echo $this->public;
 }
 protected  function pro_function(){
 echo "you request protected function<br>";
 echo $this->protected;
 }
 private function pri_function(){
 echo "you request private function<br>";
 echo $this->private;
 }
}
class test1 extends test{
 public function __construct(){
 parent::tank();
 parent::__construct();
 }
 public function tank(){
 echo $this->public;
 echo $this->private;       //Notice: Undefined property: test1::$private
 echo $this->protected;
 $this->pub_function();
 $this->pro_function();
 $this->pri_function();    //Fatal error: Call to private method test::pri_function() from context 'test1'
 }
 public  function pro_extends_function(){
 echo "you request extends_protected function<br>";
 }
 public function pri_extends_function(){
 echo "you request extends_private function<br>";
 }
}
error_reporting(E_ALL);
$test = new test1();
$test -> tank();       //子类和父类有相同名字的属性和方法,实例化子类时,子类的中的属性和方法会盖掉父类的。
?>

从上面的例子中,我们可以看出,
public:    test中的public可以被继承。
private:   test中的private不可以被继承。
protected:test中的protected可以被继承。
static:   test中的static可以被继承。
唉,对于这些东西,老是不喜欢记着,用的时候,总感觉不对,又要去查,所以写个例子,方便自己查看。
PHP 相关文章推荐
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
php强制用户转向www域名的方法
Jun 19 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
PHP实现操作redis的封装类完整实例
Nov 14 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
PHP数组函数知识汇总
May 12 PHP
CI框架支持$_GET的两种实现方法
May 18 PHP
php封装json通信接口详解及实例
Mar 07 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 PHP
基于PHP实现邮箱验证激活过程详解
Oct 28 PHP
解析thinkphp基本配置 convention.php
Jun 18 #PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
Jun 18 #PHP
基于xcache的配置与使用详解
Jun 18 #PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 #PHP
解析:通过php socket并借助telnet实现简单的聊天程序
Jun 18 #PHP
浅析is_writable的php实现
Jun 18 #PHP
解析mysql left( right ) join使用on与where筛选的差异
Jun 18 #PHP
You might like
重置版游戏视频
2020/04/09 魔兽争霸
一个php作的文本留言本的例子(四)
2006/10/09 PHP
基于mysql的bbs设计(三)
2006/10/09 PHP
round robin权重轮循算法php实现代码
2016/05/28 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
php封装一个异常的处理类
2017/06/08 PHP
调整小数的格式保留小数点后两位
2014/05/14 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
vue下跨域设置的相关介绍
2017/08/26 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
python实现简单图书管理系统
2019/11/22 Python
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
音乐系毕业生自荐信
2013/10/27 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
诚信考试倡议书
2014/04/15 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
道德模范事迹材料
2014/12/20 职场文书
考研英语辞职信
2015/05/13 职场文书
ICOM R71E和R72E图文对比解说
2022/04/07 无线电
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers
Java 关于String字符串原理上的问题
2022/04/07 Java/Android
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python