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+mysql)
Nov 23 PHP
fleaphp下不确定的多条件查询的巧妙解决方法
Sep 11 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
php 变量未定义等错误的解决方法
Jan 12 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
May 04 PHP
ThinkPHP缓存方法S()概述
Jun 13 PHP
php遍历CSV类实例
Apr 14 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 PHP
php强制下载文件函数
Aug 24 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
May 31 PHP
实现laravel 插入操作日志到数据库的方法
Oct 11 PHP
TP5框架页面跳转样式操作示例
Apr 05 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实现Soap通讯的方法
2014/11/03 PHP
php多线程并发实现方法
2016/09/30 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
PHP调用其他文件中的类
2018/04/02 PHP
项目实践之javascript技巧
2007/12/06 Javascript
JS 分号引起的一段调试问题
2009/06/18 Javascript
JavaScript 事件记录使用说明
2009/10/20 Javascript
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
JS实现的验证身份证及获取地区功能示例
2017/01/16 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
python操作redis的方法
2015/07/07 Python
Python中Proxypool库的安装与配置
2018/10/19 Python
django解决跨域请求的问题详解
2019/01/20 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Python爬取阿拉丁统计信息过程图解
2020/05/12 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
建筑个人求职信范文
2014/01/25 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
大学生两会学习心得体会
2014/03/10 职场文书
品质主管岗位职责
2014/03/16 职场文书
合作协议书
2014/04/23 职场文书
说明书格式及范文
2014/05/07 职场文书
银行委托书范本
2014/09/28 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
驻村工作简报
2015/07/20 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP