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
Mysql的GROUP_CONCAT()函数使用方法
Mar 28 PHP
php下将XML转换为数组
Jan 01 PHP
php 高效率写法 推荐
Feb 21 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
Dec 02 PHP
php实现删除空目录的方法
Mar 16 PHP
PHP中PDO的事务处理分析
Apr 07 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
Feb 12 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 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读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
JS上传组件FileUpload自定义模板的使用方法
2016/05/10 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
2017/04/13 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
python 运用Django 开发后台接口的实例
2018/12/11 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
初中英语教学反思
2014/01/25 职场文书
文秘自荐信
2014/06/28 职场文书
学校四风对照检查材料
2014/08/28 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android