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-fpm的两种进程管理模式详解
Jun 03 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
浅析php工厂模式
Nov 25 PHP
PHP查找与搜索数组元素方法总结
Jun 12 PHP
php将金额数字转化为中文大写
Jul 09 PHP
为你总结一些php信息函数
Oct 21 PHP
yii分页组件用法实例分析
Dec 28 PHP
Smarty变量用法详解
May 11 PHP
php中类和对象:静态属性、静态方法
Apr 09 PHP
php往mysql中批量插入数据实例教程
Dec 12 PHP
PHP多进程简单实例小结
Nov 09 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调用mysql存储过程
2007/02/14 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
2011/10/13 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
在vue项目中,使用axios跨域处理
2018/03/07 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
Python闭包之返回函数的函数用法示例
2018/01/27 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
python hook监听事件详解
2018/10/25 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python连接字符串过程详解
2020/01/06 Python
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
捐款活动总结
2014/08/27 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
苏州园林导游词
2015/02/03 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android