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学习教程之第2天
Jun 15 PHP
GBK的页面输出JSON格式的php函数
Feb 16 PHP
php下保存远程图片到本地的办法
Aug 08 PHP
php字符串截取函数用法分析
Nov 25 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
smarty内置函数section的用法
Jan 22 PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
Mar 07 PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
PHP创建对象的六种方式实例总结
Jun 27 PHP
PHP设计模式概论【概念、分类、原则等】
May 01 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
对javascript和select部件的结合运用
2006/10/09 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
浅谈php和.net的区别
2014/09/28 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
Python里隐藏的“禅”
2014/06/16 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
python 追踪except信息方式
2020/04/25 Python
聊聊python中的循环遍历
2020/09/07 Python
python制作微博图片爬取工具
2021/01/16 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
岗位职责的含义
2013/11/17 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
购房意向书范本
2014/04/01 职场文书
志愿者活动总结范文
2014/04/26 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
优秀班集体申报材料
2014/12/25 职场文书