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 相关文章推荐
一个简单的自动发送邮件系统(二)
Oct 09 PHP
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
UTF8编码内的繁简转换的PHP类
Jul 09 PHP
JS与PHP向函数传递可变参数的区别实例代码
May 18 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
PHP错误提示的关闭方法详解
Jun 23 PHP
php中使用base HTTP验证的方法
Apr 20 PHP
基础的WordPress插件制作教程
Nov 24 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
PHP未登录自动跳转到登录页面
Dec 21 PHP
php往mysql中批量插入数据实例教程
Dec 12 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 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/10/09 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
linux中cd命令使用详解
2015/01/08 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
2016/01/11 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
vue实现选中效果
2020/10/07 Javascript
python读取word文档的方法
2015/05/09 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
详解python中eval函数的作用
2019/10/22 Python
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
什么是索引指示器
2012/08/20 面试题
机电一体化专业应届生求职信
2013/11/27 职场文书
广告创意求职信
2014/03/17 职场文书
大学生就业自荐书
2014/06/16 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
联谊活动总结范文
2015/05/09 职场文书
gateway网关接口请求的校验方式
2021/07/15 Java/Android