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 chr() ord()中文截取乱码问题解决方法
Sep 08 PHP
php xml留言板 xml存储数据的简单例子
Aug 24 PHP
PHP仿盗链代码
Jun 03 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
ThinkPHP5 验证器的具体使用
May 31 PHP
PHP中引用类型和值类型功能与用法示例
Feb 26 PHP
PHP与SQL语句写一句话木马总结
Oct 11 PHP
YII2框架中actions的作用与使用方法示例
Mar 13 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 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
mysq GBKl乱码
2006/11/28 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
PHP Array交叉表实现代码
2010/08/05 PHP
php 模拟get_headers函数的代码示例
2013/04/27 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
2020/02/16 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
Python命令行click参数用法解析
2019/12/19 Python
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
关于礼仪的演讲稿
2014/01/04 职场文书
茶叶生产计划书
2014/01/10 职场文书
小学班主任培训方案
2014/06/04 职场文书
禁毒宣传标语
2014/06/19 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
怒海潜将观后感
2015/06/11 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
详解JAVA的控制语句
2021/11/11 Java/Android
windows server2008 开启端口的实现方法
2022/06/25 Servers