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 相关文章推荐
BBS(php &amp; mysql)完整版(三)
Oct 09 PHP
php基础知识:类与对象(2) 自动加载对象
Dec 13 PHP
php Sql Server连接失败问题及解决办法
Aug 07 PHP
php 静态变量的初始化
Nov 15 PHP
PHP中获取文件扩展名的N种方法小结
Feb 27 PHP
php基于Snoopy解析网页html的方法
Jul 09 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
Dec 25 PHP
php基于SQLite实现的分页功能示例
Jun 21 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
Oct 24 PHP
php微信公众号开发之秒杀
Oct 20 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
PHP强制转化的形式整理
May 22 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-fpm配置详解
2014/02/12 PHP
php画图实例
2014/11/05 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
基于jQuery的图片剪切插件
2011/08/03 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
在antd Table中插入可编辑的单元格实例
2020/10/28 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
基于python的汉字转GBK码实现代码
2012/02/19 Python
详解flask入门模板引擎
2018/07/18 Python
django如何自己创建一个中间件
2019/07/24 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
将HTML5 Canvas的内容保存为图片借助toDataURL实现
2013/05/20 HTML / CSS
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
计算机开发个人求职信范文
2013/09/26 职场文书
家长会标语
2014/06/24 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
流动人口婚育证明范本
2014/09/26 职场文书
安全先进个人材料
2014/12/29 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书