参考:

http://www.cnblogs.com/devcjq/articles/2424738.html

http://www.cnblogs.com/alsf/p/9621002.html

https://blog.csdn.net/xf552527/article/details/81325815

1.PHP之parent解析

parent是指向父类的指针,一般用于调用父类的构造函数来初始化子类,如parent::__construct()

2.PHP之$this解析

$this是指向当前对象(即类的实例化对象)的指针
  • $this 指向的是实际调用时的对象,也就是说,实际运行过程中,谁调用了类的属性或方法,$this 指向的就是哪个对象。
  • $this 不能访问类的静态属性和常量,且 $this 不能存在于静态方法中,因为静态变量和静态方法是属于类的,而非属于类实例化后的对象。
  • 如果要在静态方法中,强制使用类的其他方法,则只能先获取类的实例化对象(new classname()),然后再使用该对象的方法。
  • 当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用(通常是该方法所从属的对象)。

3.PHP之self解析

self是指向当前类的指针,而非实例化后的对象指针
  • self 和 __CLASS__,都是对当前类的静态引用,取决于定义当前方法所在的类。即self 写在哪个类里面,它引用的就是谁。
  • 由于静态变量和静态方法是属于类的,因此可以使用指向当前类的指针self调用。
  • self 可以用于访问类的静态属性、静态方法和常量,但 self 指向的是当前定义所在的类,这是 self 的限制

4.PHP之static解析

static是指向当前调用类的指针
  • 静态调用时,static 指向的是实际调用时的类;非静态调用时,static 指向的是实际调用时的对象所属的类。
  • static 可以用于静态或非静态方法中,也可以访问类的静态属性、静态方法、常量和非静态方法,但不能访问非静态属性。
  • static 关键字除了可以声明类的静态成员(属性和方法)外,还有一个非常重要的作用就是后期静态绑定
<?php 

  class Boo {

      protected static $str = "This is class Boo";

      public static function get_info(){

          echo get_called_class()."\n";
echo self::$str;
} public static function get_msg(){
echo get_class()."\n";
echo static::$str;
}
} class Foo extends Boo{ protected static $str = "This is class Foo"; } Foo::get_info();
echo "\n";
Foo::get_msg(); ?> //输出结果
Foo
This is class Boo
Boo
This is class Foo

PHP中parent、this、self和static的区别的更多相关文章

  1. PHP中new self()和new static()的区别

    1.new static()是在PHP5.3版本中引入的新特性. 2.无论是new static()还是new self(),都是new了一个新的对象. 3.这两个方法new出来的对象有什么区别呢,说 ...

  2. PHP中new self()和new static()的区别探究

    1.new static()是在PHP5.3版本中引入的新特性. 2.无论是new static()还是new self(),都是new了一个新的对象. 3.这两个方法new出来的对象有什么区别呢,说 ...

  3. 在java中public void与public static void区别

    static 方法可以被main方法直接调用,而非static方法不可以.因为static方法是属于类的,是类方法.可以通过类名.方法名直接调用.而非static方法必须等对象被new出来以后才能使用 ...

  4. PHP面向对象中new self( )和 new static( ) 的区别

    在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类. class A { public static $_a = 'Class A'; public static ...

  5. JAVA中,一个类中,方法加不加static的区别,

    通俗理解: 1.若是对象的特有行为,(也就是某个实例方法特有的行为),不加static 2. 若是对象集合共有的集合,则加static static类型方法只可以访问静态变量和方法 实例方法可以访问实 ...

  6. spring中<bean>中parent标签的使用

    简介:spring 中parent标签是指:某个<bean>的父类.这个类可以覆盖parent的属性, 代码如下: Parent类的代码如下: package com.timo.domai ...

  7. Java中主类中定义方法加static和不加static的区别

     Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...

  8. Jquery中parent()和parents()

    一.parent()方法 此方法取得匹配元素集合中每个元素的紧邻父元素,也就是第一级父元素,而不是所有的祖先元素.所取得的父元素集合也可以使用表达式进行筛选. 二.parents()方法 此方法取得一 ...

  9. vue中assets和static的区别

    Vue中assets和static的区别 再一次框架定型中,与同事在静态资源的存放上有了一些分歧,后来经过查阅总结如下: 相同点:   assets和static两个都是存放静态资源文件.项目中所需要 ...

  10. PHP中parent关键词

    parent关键词 parent表示“父母”的意思,在面向对象语法中,代表“父类” ——本质上就是代表父类这个“类”,而不是父类的“对象”: 其使用方式为: parent::属性或方法: //通常是静 ...

随机推荐

  1. 6.13 py网络编程

    tcp的十种状态 python使用原始套接字才可以做黑客攻击!!!!!伪造数据包!!!!!直接越过底层!socket这个东西是经过linux过滤过得! TTL  每经过一个路由器就减1 谁先调clos ...

  2. CodeForces - 754D

    All our characters have hobbies. The same is true for Fedor. He enjoys shopping in the neighboring s ...

  3. d9

    # 整体进度# python基础 ——38天 2个月# 数据库 —— 存储数据和信息用的,本质上和文件没有区别 1-2周 # —— 增删改查更方便了# 前端 —— 2周# 框架 —— django 2 ...

  4. LDAP - 轻量目录访问协议

    LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP

  5. Codeforces 670E - Correct Bracket Sequence Editor - [线段树]

    题目链接:https://codeforces.com/contest/670/problem/E 题意: 给出一个已经匹配的括号串,给出起始的光标位置(光标总是指向某个括号). 有如下操作: 1.往 ...

  6. AudioUnit录音和播放同时进行的一些注意点

    录音(播放)和暂停 -(void)start { self.soundTotalLength = 0.0f; if (!self.unitHaveStart) { NSError *error = n ...

  7. XDCTF网络安全大赛——Web100

    打开网址 http://game1.xdctf.com:8083/f16c3b1ed800fc78e605/index.php 网页中显示了一张图片,图片名为hackkey.png: 还有一段文字: ...

  8. URL地址中的#

    1.#的涵义 代表网页中的一个位置.井号后面的字符,就是该位置的标识符.比如, http://www.baidu.com/index.html#one 就代表网页index.html的one位置.浏览 ...

  9. Mysql 性能优化教程

    Mysql 性能优化教程 目录 目录 1 背景及目标 2 Mysql 执行优化 2 认识数据索引 2 为什么使用数据索引能提高效率 2 如何理解数据索引的结构 2 优化实战范例 3 认识影响结果集 4 ...

  10. [apr] Apache Portable Runtime

    接手新项目,前任大量的使用了APR,虽然不影响理解主逻辑,但是看见一行不知道干嘛的代码,总是特别炸眼. 况且,虽然我从来不跨平台.但是APR如此优秀,学习理解它都不是浪费时间. 可是让人崩溃的是,竟然 ...