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 相关文章推荐
一个MYSQL操作类
Nov 16 PHP
MySql 按时间段查询数据方法(实例说明)
Nov 02 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
用PHP实现递归循环每一个目录
Aug 08 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
PHP实现的下载远程图片自定义函数分享
Jan 28 PHP
PHP中4种常用的抓取网络数据方法
Jun 04 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 15 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面向对象的使用教程 简单数据库连接
2006/11/25 PHP
php 用sock技术发送邮件的函数
2007/07/21 PHP
php四种基础算法代码实例
2013/10/29 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
Mootools 1.2教程 类(一)
2009/09/15 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
JavaScript Math.round() 方法
2015/12/18 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
JS实现微信摇一摇原理解析
2017/07/22 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
下载给定网页上图片的方法
2014/02/18 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
2014学雷锋活动总结
2014/03/09 职场文书
工商管理专业自荐信
2014/06/03 职场文书
老干部工作先进事迹
2014/08/17 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
暖春观后感
2015/06/08 职场文书
我是特种兵观后感
2015/06/11 职场文书
安全生产协议书
2016/03/22 职场文书