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 相关文章推荐
什么是MVC,好东西啊
May 03 PHP
ZF等常用php框架中存在的问题
Jan 10 PHP
使用eAccelerator加密PHP程序
Oct 03 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
Jul 03 PHP
php排序算法(冒泡排序,快速排序)
Oct 09 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
ThinkPHP分页实例
Oct 15 PHP
php学习笔记之基础知识
Nov 08 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
如何使用微信公众平台开发模式实现多客服
Jan 06 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 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
中国的第一台收音机
2021/03/01 无线电
用PHP创建PDF中文文档
2006/10/09 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
jquery蒙版控件实现代码
2010/12/08 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
python django集成cas验证系统
2014/07/14 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
python实现逻辑回归的方法示例
2017/05/02 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
Django models filter筛选条件详解
2020/03/16 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
幼儿园运动会入场词
2014/02/10 职场文书
白血病募捐倡议书
2014/05/14 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
法定授权委托证明书
2014/09/27 职场文书
教师师德师风整改措施
2014/10/24 职场文书
客房领班岗位职责
2015/02/11 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书