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 array_flip() 删除数组重复元素
Jan 14 PHP
PHP不用第三变量交换2个变量的值的解决方法
Jun 02 PHP
基于PHPExcel的常用方法总结
Jun 13 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
PHP入门经历和学习过程分享
Apr 11 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
微信接口生成带参数的二维码
Jul 31 PHP
Django 中 cookie的使用
Aug 17 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 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 图片上传实现代码 带详细注释
2010/04/29 PHP
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
form自动提交实例讲解
2017/07/10 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
js textarea自动增高并隐藏滚动条
2009/12/16 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
2019/06/17 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
Python程序员开发中常犯的10个错误
2014/07/07 Python
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
python正则表达式面试题解答
2020/04/28 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
使用python实现画AR模型时序图
2019/11/20 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
企业车辆管理制度
2014/01/24 职场文书
护校行动方案
2014/05/31 职场文书
五四青年节活动总结
2015/02/10 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
2015年药房工作总结
2015/04/25 职场文书
2015年班干部工作总结
2015/04/29 职场文书
教师节主题班会教案
2015/08/17 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript