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制作简单分页(从数据库读取记录)的方法详解
May 04 PHP
CURL状态码列表(详细)
Jun 27 PHP
PHP基本语法总结
Sep 06 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
Oct 14 PHP
PHP中防止SQL注入方法详解
Dec 25 PHP
既简单又安全的PHP验证码 附调用方法
Jun 02 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 PHP
php实现微信支付之退款功能
May 30 PHP
详解php伪造Referer请求反盗链资源
Jan 24 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 PHP
php使用自带dom扩展进行元素匹配的原理解析
May 29 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
博士208HAF收音机实习报告
2021/03/02 无线电
用PHP调用数据库的存贮过程
2006/10/09 PHP
php 生成文字png图片的代码
2011/04/17 PHP
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
php验证码实现代码(3种)
2015/09/07 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
JS模拟多线程
2007/02/07 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
简介Django中内置的一些中间件
2015/07/24 Python
Python面向对象class类属性及子类用法分析
2018/02/02 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
电信专业应届生自荐信
2013/09/28 职场文书
中层干部岗位职责
2013/12/18 职场文书
交通事故委托书范本
2014/09/28 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
导游词之杭州西湖
2019/09/19 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
人民币符号
2022/02/17 杂记
MySQL池化框架学习接池自定义
2022/07/23 MySQL