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 相关文章推荐
rephactor 优秀的PHP的重构工具
Jun 09 PHP
nginx+php-fpm配置文件的组织结构介绍
Nov 07 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
Sep 24 PHP
PHP查询快递信息的方法
Mar 07 PHP
php修改上传图片尺寸的方法
Apr 14 PHP
php关联数组快速排序的方法
Apr 17 PHP
YII动态模型(动态表名)支持分析
Mar 29 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 PHP
Yii框架的路由配置方法分析
Sep 09 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 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
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
python各种语言间时间的转化实现代码
2016/03/23 Python
Python数据类型详解(四)字典:dict
2016/05/12 Python
Python实现的计数排序算法示例
2017/11/29 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
Python函数基本使用原理详解
2020/03/19 Python
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
俄罗斯家居用品购物网站:Евродом
2020/11/21 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
办公室保洁员岗位职责
2013/12/02 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
秘书英文求职信
2014/04/16 职场文书
化妆品促销活动总结
2015/05/07 职场文书
十八大观后感
2015/06/12 职场文书
追讨欠款律师函
2015/06/24 职场文书
关于感恩的作文
2019/08/26 职场文书