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将fileterms函数返回的结果变成可读的形式
Apr 21 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
PHP中__get()和__set()的用法实例详解
Jun 04 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
浅谈php提交form表单
Jul 01 PHP
Yii2使用swiftmailer发送邮件的方法
May 03 PHP
PHP中in_array函数使用的问题与解决办法
Sep 11 PHP
详解php中 === 的使用
Oct 24 PHP
PHP+Ajax无刷新带进度条图片上传示例
Feb 08 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 17 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
php实现webservice实例
2014/11/06 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
js null,undefined,字符串小结
2010/08/21 Javascript
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
vue组件间通信解析
2017/03/01 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
pyramid配置session的方法教程
2013/11/27 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
python 实现矩阵按对角线打印
2019/11/29 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
倩碧英国官网:Clinique英国
2018/08/10 全球购物
咖啡厅创业计划书范本
2014/01/22 职场文书
法学函授自我鉴定
2014/02/06 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
禁毒宣传标语
2014/06/19 职场文书
国企干部对照检查材料
2014/08/22 职场文书
入股合作协议书
2014/10/12 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android