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学习 计数器实例代码
Jun 15 PHP
php在字符串中查找另一个字符串
Nov 19 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 PHP
php中利用explode函数分割字符串到数组
Feb 08 PHP
PHP 字符串长度判断效率更高的方法
Mar 02 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
smarty模板判断数组为空的方法
Jun 10 PHP
PHP技术开发微信公众平台
Jul 22 PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 PHP
php在linux环境中如何使用redis详解
Dec 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中json_encode()和json_decode()
2014/05/25 PHP
php中执行系统命令的方法
2015/03/21 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
JQuery中$之选择器用法介绍
2011/04/05 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
python中reload(module)的用法示例详解
2017/09/15 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
英语生日邀请函
2014/01/23 职场文书
学校十一活动方案
2014/02/01 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
海飞丝广告词
2014/03/20 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL
python前后端自定义分页器
2022/04/13 Python