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 相关文章推荐
使用 eAccelerator加速PHP代码的方法
Sep 30 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
Mar 13 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
May 26 PHP
php日期转时间戳,指定日期转换成时间戳
Jul 17 PHP
基于php split()函数的用法详解
Jun 05 PHP
PHP自定义大小验证码的方法详解
Jun 07 PHP
php获取字段名示例分享
Mar 03 PHP
php简单实现MVC
Feb 05 PHP
php 使用array函数实现分页
Feb 13 PHP
详解PHP中的PDO类
Jul 06 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
php微信开发之音乐回复功能
Jun 14 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开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
Javascript的闭包
2009/12/31 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
js 操作符汇总
2014/11/08 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
jQuery鼠标事件总结
2016/10/13 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
python中异常捕获方法详解
2017/03/03 Python
安装docker-compose的两种最简方法
2019/07/30 Python
Python模块的制作方法实例分析
2019/12/21 Python
python判断链表是否有环的实例代码
2020/01/31 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
pytorch __init__、forward与__call__的用法小结
2021/02/27 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
实习老师个人总结的自我评价
2013/09/28 职场文书
公务员总结性个人自我评价
2013/12/05 职场文书
2016新年慰问信范文
2015/03/25 职场文书
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
Go语言读取txt文档的操作方法
2022/01/22 Golang
Java版 简易五子棋小游戏
2022/05/04 Java/Android