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对大文件进行读取操作的实现代码
Jan 23 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
php连接Access数据库错误及解决方法
Jun 20 PHP
浅析Apache中RewriteCond规则参数的详细介绍
Jun 30 PHP
zf框架的数据库追踪器使用示例
Mar 13 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
Aug 23 PHP
使用PHP进行微信公众平台开发的示例
Aug 21 PHP
详解PHP实现异步调用的4种方法
Mar 14 PHP
PHP递归遍历多维数组实现无限分类的方法
May 06 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
May 28 PHP
Linux系统下安装PHP7.3版本
Jun 26 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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
php实现网页缓存的工具类分享
2015/07/14 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
js 点击a标签 获取a的自定义属性方法
2016/11/21 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
js时间控件只显示年月
2017/01/08 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
求职简历自我评价怎么写
2015/03/10 职场文书
公司搬迁通知
2015/04/20 职场文书
python异步的ASGI与Fast Api实现
2021/07/16 Python