php class中self,parent,this的区别以及实例介绍


Posted in PHP onApril 24, 2013

一,this

1,要用this,你必有是一个对像的形势,不然它会报错的,Fatal error: Using $this when not in object context。
2,this可以调用本类中的方法和属性,也可以调用父类中的可以调的方法和属性

二,self

1,self可以访问本类中的静态属性和静态方法,可以访问父类中的静态属性和静态方法。
2,用self时,可以不用实例化的

三,parent

1,parent可以访问父类中的静态属性和静态方法。
2,用parent时,可以不用实例化的

<?php
class test{
 public $public;
 private $private;
 protected $protected;
 static $instance;
 static $good = 'tankzhang <br>';
 public $tank = 'zhangying <br>';
 public  function __construct(){
 $this->public    = 'public     <br>';
 $this->private   = 'private    <br>';
 $this->protected = 'protected  <br>';
 }
 public 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;
 }
 static function sta_function(){
 echo "you request static function<br>";
 }
}
class test1 extends test{
 static $love = "tank <br>";
 private $aaaaaaa = "ying <br>";
 public function __construct(){
 parent::tank();
 parent::__construct();
 }
 public function tank(){
 echo $this->public;
 echo $this->protected;
 echo $this->aaaaaaa;
 $this->pro_function();
 }
 public  function test1_function(){
 echo self::$love;
 echo self::$good;
 echo parent::$good;
 echo parent::$tank;   //Fatal error: Access to undeclared static property: test::$tank
 echo self::$tank;     //Fatal error: Access to undeclared static property: test::$tank
 }
 static function extends_function(){
 parent::sta_function();
 self::pro_function();
 echo "you request extends_private function<br>";
 }
}
error_reporting(E_ALL);
$test = new test1();
$test->tank();            //子类和父类有相同名字的属性和方法,实例化子类时,会调用子类中的方法。
test1::test1_function();
test1::extends_function();  //执行一部分后,报Fatal error: Using $this when not in object context in D:\xampp\htdocs\mytest\www4.php on line 32
?>

1,当我们调用$test->tank(); 这个方法时,tank里面的$this是一个对像 ,这个对像可以调用本类,父类中的方法和属性,

2,test1::test1_function(); 当我们用静态的方法去调用非静态方法时,会显示警告的,Non-static method test::test1_function() should not be called statically可以看出不,self可以调用本类,父类中的静态属性 ,parent可以调用父类中的静态属性 ,二者调用非静态属性会报错。代码中有注释

3,test1::extends_function(); 这一步会报错,报在非对像中使用$this 。为什么会这样呢,test1::extends_function();只是调用了class中的一个方法,并没有实例化,所以根本不存在什么对像,当父类中用到$this时,就会报错

PHP 相关文章推荐
set_include_path和get_include_path使用及注意事项
Feb 02 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
分享一则PHP定义函数代码
Feb 26 PHP
php写入数据到CSV文件的方法
Mar 14 PHP
PHP的全局错误处理详解
Apr 25 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
Laravel程序架构设计思路之使用动作类
Jun 07 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
Sep 13 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 #PHP
php判断终端是手机还是电脑访问网站的思路及代码
Apr 24 #PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 #PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 #PHP
『PHP』PHP截断函数mb_substr()使用介绍
Apr 22 #PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 #PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 #PHP
You might like
c#中的实现php中的preg_replace
2009/12/21 PHP
Yii2如何批量添加数据
2016/05/17 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
使用js 设置url参数
2013/07/08 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
Three.js学习之网格
2016/08/10 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
python DataFrame 取差集实例
2019/01/30 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
大学毕业生求职自荐信
2014/02/20 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书
大学同学聚会感言
2015/07/30 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP