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自动生成月历代码
Oct 09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
Dec 13 PHP
PHP 源代码压缩小工具
Dec 22 PHP
php设计模式  Command(命令模式)
Jun 17 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
Apr 08 PHP
php删除指定目录的方法
Apr 03 PHP
php类的扩展和继承用法实例
Jun 20 PHP
PHP中addcslashes与stripcslashes函数用法分析
Jan 07 PHP
php简单实现数组分页的方法
Apr 30 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 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 cookie工作原理与实例详解
2016/07/18 PHP
用jscript实现新建word文档
2007/06/15 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
python模块之time模块(实例讲解)
2017/09/13 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
Python中的取模运算方法
2018/11/10 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
在C#中如何实现多态
2014/07/02 面试题
优秀毕业生求职信范文
2014/01/02 职场文书
《满井游记》教学反思
2014/02/26 职场文书
幼儿园新年寄语
2014/04/03 职场文书
安全技术说明书
2014/05/09 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
导游词之阆中古城
2019/12/23 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python