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下过滤HTML代码的函数
Dec 10 PHP
php 注释规范
Mar 29 PHP
用php实现选择排序的解决方法
May 04 PHP
php二维数组用键名分组相加实例函数
Nov 06 PHP
ThinkPHP模板IF标签用法详解
Jul 01 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
Feb 26 PHP
PHP基于SMTP协议实现邮件发送实例代码
Apr 27 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 PHP
PHP sdk文档处理常用代码示例解析
Dec 09 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初学者头疼问题总结
2006/10/09 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
动态控制Table的js代码
2007/03/07 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
为python设置socket代理的方法
2015/01/14 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
结束运行python的方法
2020/06/16 Python
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
程序员机试试题汇总
2012/03/07 面试题
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
小学毕业典礼主持词
2014/03/27 职场文书
日语专业求职信
2014/07/04 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
申报优秀教师材料
2014/12/16 职场文书
实习单位指导教师评语
2014/12/30 职场文书
质检员岗位职责
2015/02/03 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
python接口测试返回数据为字典取值方式
2022/02/12 Python
nginx常用配置conf的示例代码详解
2022/03/21 Servers