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 字符串编码截取函数(兼容utf-8和gb2312)
May 02 PHP
mayfish 数据入库验证代码
Apr 30 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
php常用字符串处理函数实例分析
Nov 22 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 PHP
php封装的mongodb操作类代码
Aug 06 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
PHP 文件上传限制问题
Sep 01 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 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 jsonp单引号转义
2014/11/23 PHP
PHP可变变量学习小结
2015/11/29 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
input 输入框内的输入事件详细分析
2010/03/17 Javascript
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
Javascript中的 “&amp;” 和 “|” 详解
2017/02/02 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
shiro授权的实现原理
2017/09/21 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
three.js实现炫酷的全景3D重力感应
2018/12/30 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
python解析中国天气网的天气数据
2014/03/21 Python
Python程序设计入门(4)模块和包
2014/06/16 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
keras中的卷积层&amp;池化层的用法
2020/05/22 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
公司运动会策划方案
2014/05/25 职场文书
三方股东合作协议书范本
2014/09/28 职场文书
鉴史问廉观后感
2015/06/10 职场文书
母亲节感言
2015/08/03 职场文书