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防CC攻击实现代码
Dec 29 PHP
PHP __autoload函数(自动载入类文件)的使用方法
Feb 04 PHP
PHP取整数函数常用的四种方法小结
Jul 05 PHP
php函数array_merge用法一例(合并同类数组)
Feb 03 PHP
深入分析PHP引用(&amp;)
Sep 04 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
跟我学Laravel之路由
Oct 15 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
PHP封装的验证码工具类定义与用法示例
Aug 22 PHP
用php定义一个数组最简单的方法
Oct 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类Class的概念
2012/06/14 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
JS实现烟花爆炸效果
2020/03/10 Javascript
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
python删除列表内容
2015/08/04 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
python向图片里添加文字
2019/11/26 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
生产经理的自我评价分享
2013/11/07 职场文书
给医务人员表扬信
2014/01/12 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
家长会标语
2014/06/24 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
2015试用期转正工作总结
2014/12/12 职场文书