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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
利用谷歌 Translate API制作自己的翻译脚本
Jun 04 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
PHP运行模式汇总
Nov 06 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
php微信开发之音乐回复功能
Jun 14 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 PHP
laravel通过a标签从视图向控制器实现传值
Oct 15 PHP
php中try catch捕获异常实例详解
Aug 06 PHP
深入解析PHP底层机制及相关原理
Dec 11 PHP
php png失真的原因及解决办法
Nov 17 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
做一个有下拉功能的留言版
2006/10/09 PHP
php 文件上传类代码
2011/08/06 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
Python去除列表中重复元素的方法
2015/03/20 Python
Python使用chardet判断字符编码
2015/05/09 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
Python去除字符串两端空格的方法
2015/05/21 Python
Python绘制3D图形
2018/05/03 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
大一学生假期实习的自我评价
2013/10/12 职场文书
一年级数学教学反思
2014/02/01 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
Java使用Unsafe类的示例详解
2021/09/25 Java/Android
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL