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 相关文章推荐
使用XDebug调试及单元测试覆盖率分析
Jan 27 PHP
基于PHP编程注意事项的小结
Apr 27 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
php+ajax实现无刷新分页的方法
Nov 04 PHP
php实现mysql事务处理的方法
Dec 25 PHP
Laravel 5框架学习之环境与配置
Apr 08 PHP
thinkphp3.x中session方法的用法分析
May 20 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
Ajax和PHP正则表达式验证表单及验证码
Sep 24 PHP
Yii2结合Workerman的websocket示例详解
Sep 10 PHP
PHP array_shift()用法实例分析
Jan 07 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中$this-&amp;gt;含义分析
2009/11/29 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
Python常用知识点汇总
2016/05/08 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Python探索之创建二叉树
2017/10/25 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
生产部岗位职责范文
2014/02/07 职场文书
中考冲刺决心书
2014/03/11 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
军人离婚协议书样本
2014/10/21 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
OpenCV实现反阈值二值化
2021/11/17 Java/Android
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技