Home > Backend Development > PHP Tutorial > PHP手册中的这个例子怎么理解?

PHP手册中的这个例子怎么理解?

WBOY
Release: 2016-06-06 20:41:44
Original
815 people have browsed it

http://php.net/manual/zh/language.oop5.basic.php
PHP 5.3.0 引进了两个新方法来创建一个对象的实例:
Example #5 创建新对象

<code><?php class Test
{
    static public function getNew()
    {
        return new static;
    }
}

class Child extends Test
{}

$obj1 = new Test();
$obj2 = new $obj1;
var_dump($obj1 !== $obj2);

$obj3 = Test::getNew();
var_dump($obj3 instanceof Test);

$obj4 = Child::getNew();
var_dump($obj4 instanceof Child);
?>
</code>
Copy after login
Copy after login

第六行的 return new static;是什么意思?
第十四行的 $obj2 = new $obj1; new后面不是应该跟类名吗?这里怎么写的是实例?

回复内容:

http://php.net/manual/zh/language.oop5.basic.php
PHP 5.3.0 引进了两个新方法来创建一个对象的实例:
Example #5 创建新对象

<code><?php class Test
{
    static public function getNew()
    {
        return new static;
    }
}

class Child extends Test
{}

$obj1 = new Test();
$obj2 = new $obj1;
var_dump($obj1 !== $obj2);

$obj3 = Test::getNew();
var_dump($obj3 instanceof Test);

$obj4 = Child::getNew();
var_dump($obj4 instanceof Child);
?>
</code>
Copy after login
Copy after login

第六行的 return new static;是什么意思?
第十四行的 $obj2 = new $obj1; new后面不是应该跟类名吗?这里怎么写的是实例?

http://www.5dphp.com/art_117.html

return new static就是新建一个当前类对象并返回的意思,具体请参考:http://stackoverflow.com/questions/16977369/php-new-staticvariable

后接对象也是PHP 5.3新加的功能,相当于再new Test()了吧,可以看这个测试:http://3v4l.org/XMKAI

声明我是一个普通的开发者,我更多关注如何使用代码而不是问为什么。
1 static 是新增的关键字,可以理解为(或者说文档内容翻译为)用于迟绑定。例如

<code>class A {
    public static $TEST = 1;
    public function get() {
        return self::$TEST;
    }
}
class B {
    public static $TEST = 2;
}</code>
Copy after login

B对象实例执行get方法会得到A对象声明中定义的TEST值,而不是B本身的,但是把return self::$TEST修改成return static::$TEST则会得到预期的结果。最明显的好处是单件对象的继承变得容易了。

2 至于new $obj,应该算是个魔术写法?以前可以使用$className = 'stdClass'; $obj = new $className的方式构造,这应该是个变种吧,只是一种简化,没什么特别的。因为它很明显等效于 $className = get_class($instance); $obj = new $className;

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template