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 相关文章推荐
深入php之规范编程命名小结
May 15 PHP
php实现分页工具类分享
Jan 09 PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 PHP
ThinkPHP实现支付宝接口功能实例
Dec 02 PHP
PHP中的魔术方法总结和使用实例
May 11 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
Thinkphp实现站点静态化的方法详解
Mar 21 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 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
PHP令牌 Token改进版
2008/07/18 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
js自带函数备忘 数组
2006/12/29 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
vuejs如何配置less
2017/04/25 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
深入理解Vue transition源码分析
2017/07/30 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
vue 实现图片懒加载功能
2020/12/31 Vue.js
python re模块findall()函数实例解析
2018/01/19 Python
python中的decorator的作用详解
2018/07/26 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
物流仓储实习自我鉴定
2013/09/25 职场文书
开工庆典邀请函范文
2014/01/16 职场文书
党性心得体会
2014/09/03 职场文书
安全教育日主题班会
2015/08/13 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers