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 相关文章推荐
第1次亲密接触PHP5(1)
Oct 09 PHP
PHP常用代码
Nov 23 PHP
php empty函数判断mysql表单是否为空
Apr 12 PHP
php购物车实现方法
Jan 03 PHP
php中使用base HTTP验证的方法
Apr 20 PHP
Docker 如何布置PHP开发环境
Jun 21 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
laravel自定义分页效果
Jul 23 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
php使用json-schema模块实现json校验示例
Sep 28 PHP
PHP isset()及empty()用法区别详解
Aug 29 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
网络资源
2006/10/09 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
wxPython中文教程入门实例
2014/06/09 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
python 实现视频 图像帧提取
2019/12/10 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
高分子材料个人求职信范文
2013/09/25 职场文书
销售会计工作职责
2013/12/02 职场文书
总经理司机岗位职责
2014/02/06 职场文书
结对共建工作方案
2014/06/02 职场文书
公司员工安全协议书
2014/11/21 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
python爬虫--selenium模块
2021/03/31 Python
go goroutine 怎样进行错误处理
2021/07/16 Golang