@H_4030@前言
@H
403_0@本文主要跟大家介绍了关于
PHP面向对象中new self()与 new static()的区别,这两个
方法new出来的对象有什么区别呢,说白了就是new出来的到底是同一个类实例还是不同的类实例呢?下面话不多说了,来一起看看详细的介绍吧。
@H_
4030@区别如下:
@H403_0@首先阐明结论,在
PHP中 self指向定义了当前被
调用方法的类, static指向
调用当前静态
方法的类。
@H_
403_0@
接下来通过一个例子来证明上面的结果
<div class="jb51code">
<pre class="brush:
PHP;">
class A
{
public static $_a = 'Class A';
public static function echoProperty()
{
echo self::$_a . PHP_EOL;
}
}
class B extends A
{
public static $_a = 'Class B';
}
$obj = new B();
B::echoProperty();//输出 Class A
PHP;">
class A
{
public static $_a = 'Class A';
public static function echoProperty()
{
echo static::$_a . PHP_EOL;
}
}
//再次调用B::echoProperty将输出 'CLASS B'
了一个新的语法:后期静态绑定(Late static binding),使用static关键字替代self关键字,使得static指向与get_called_class()返回的相同的类,即当前
PHP;">
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_self()); // A
echo get_class(A::get_static()); // A