php -- new self() 和 new static

看一段摘自网上的代码

class A {
  public static function get_self() {
    return new self();
  }

  public static function get_static() {
    return new static();
  }
}

class B extends A {}

echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_static()); // A

通俗点讲就是:

new self();   在哪个类里面执行的该代码,返回的就是哪个类的对象。如果该代码只写在父类中,即使子类继承自父类,返回的依然是父类的对象。

new static();  哪个类调用的它,返回的就是哪个类的的对象。

时间: 2024-10-11 20:56:25

php -- new self() 和 new static的相关文章

静态修饰符static,类中的常量定义修饰符

static可以用来区分成员变量.方法是属于类本身还是属于类实例化后的对象.有static修饰的成员属于类本身,没有static修饰的成员属于类的实例. 静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失static是一个修饰符,用于修饰成员(成员变量和成员函数)静态成员随着类的加载而加载.静态成员优先于对象存在.静态成员被所有对象所共享静态成员多了一个中调用方式,可以被类名直接调用.静态的优缺点优点: 静态成员多了一种调用方式.可以直接被类名调用 格式 :类名.静态成员.也

Static关键字

1.static修饰的资源属于类级别的资源,静态的资源,对于类的所有实例对象的共享的资源 2.static关键字可以用来修饰属性,方法,代码块 3.static修饰的资源,在类加载期间执行 Static修饰的属性 static关键字修饰属性,属于对类所有实例对象共享的变量 访问静态的属性:类名.属性名 Static修饰的方法 static关键字修饰的方法属于静态方法可以直接类名.方法名()进行调用,一般的是把静态方法作为工具方法 静态方法中不能调用对象的资源(对象属性,对象方法); Static

java杂记-static

首先是static的概念 借鉴 http://lavasoft.blog.51cto.com/62575/18771/  (好吧,都是复制这个的.写的很好,所以我就复制了) static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,java中无全局概念. 被static修饰的成员变量和成员方法独立于该类的任何对象,也就是说,它不依赖类特定的实例,被类的所有实例共享.只要这个类被加载,Java虚拟机就能根据类名在运行时数

PHP 面向对象中常见关键字使用(final、static、const和instanceof)

PHP 面向对象中常见关键字的使用: 00x1.Final :final关键字可以加在类或者类中方法之前,但是不能使用final标识成员属性. 作用: 使用final标识的类,不能被继承. 在类中使用final标识的成员方法,在子类中不能覆盖. 总结:final表示为最终的意思,所以使用final关键字的类或者类中的成员方法是不能被更改的. 00x2.Static :static关键字将类中的成员属性或者成员方法标识为静态的,static标识的成员属性属于整个类,static成员总是唯一存在的,

C++ 类模板三(类模版中的static关键字)

//类模版中的static关键字 #include<iostream> using namespace std; /* 类模板本质上是c++编译器根据类型参数创建了不同的类, c++编译器在利用类模板生成类的时候会为每个类生成一个static变量 那么对于类中的static关键字就非常好理解了 static关键字修饰的变量是属于类的 同一个类的对象共享类的static静态变量 类模板中的static修饰的变量数据类型必须是确定的 不可以是类型参数 因为静态变量在类对象之前初始化 这时候还没有通

static

用static声明的变量不用调用方法,可以直接使用.此变量称为静态变量,第一次声明之后不会再被声明. 栈 堆 静态变量区

java基础之static(静态)

静态的属性.方法等属于类而不是对象. 静态的方法能够由类直接调用,不须要将类实例化. 本篇主要说明:1.态的代码.成员变量要比构造方法先运行. 2. 子类的构造方法会默认去调用父类的不带參数的构造方法,假设父类不提供不带參数的构造方法,则子类的构造方法要显示使用super(param),去调用父类的带參数的构造方法 下面代码,能够将凝视掉的内容放开,或增改參数类型.參数定义的位置等,然后运行main看看打印结果,就会更加明确:静态的代码(块).成员变量要比构造方法先运行. /** * autho

java中static关键字的理解

static关键字 解决两种问题 1.   只想为某特定域分配单一的存储空间,而不去考虑究竟要创建多少对象,甚至根本不创建任何对象 2.   希望某种方法不与包含它的任何对象关联在一起,也就是说,即使没有创建对象也能调用这个方法 当static作用于某个字段时,肯定会改变数据创建的方式,因为一个static字段对每个类时只有一份存储空间,而非static字段则是对每一个对象都有一个存储空间 和其他方法一样,static方法可以创建或使用其类型相同的被命名的对象,因此static方法常常被拿来做牧

java编程思想-——static关键字

对于java来说,创建类时候,就是在描述那个类的对象的外观和行为.除非用new创建那个类的对象,否则,实际上并未获得任何对象.执行new操作的时候,数据存储空间才被分配,其方法才被外界所调用. 1.什么是static关键字 static关键字标示的变量和方法,只分配单一的存储空间.不去考虑究竟要创建多少个对象,甚至根本就不用创建对象.没有创建对象也可以访问static标记的对象或者方法. 对于static标记的对象,即可以用对象来操作,也可以用类来操作. 2.static的一些用法. 对于sta

public static &lt;T extends Comparable&lt;? super T&gt;&gt; void sort (List&lt;T&gt; list)的理解

public static <T extends Comparable<? super T>> void sort (List<T> list)的理解 public static <T extends Comparable<? super T>> void sort (List<T> list) (1)首先:public static void sort(List list) (2)为了安全性加泛型:public static <