Php 文件中的Return语句不';t停止类定义?

Php 文件中的Return语句不';t停止类定义?,php,include,return,Php,Include,Return,如本文所述,有一个选项可以停止执行带有“return”语句的include 谁能告诉我为什么会这样 //test1.php include 'test2.php'; var_dump(class_exists('TestClass_ShouldntBeDefined')); //test2.php return; class TestClass_ShouldntBeDefined { } //跑 $ php -f test1.php bool(true) 为什么这是真的 当test2.ph

如本文所述,有一个选项可以停止执行带有“return”语句的include

谁能告诉我为什么会这样

//test1.php

include 'test2.php';
var_dump(class_exists('TestClass_ShouldntBeDefined'));
//test2.php

return;
class TestClass_ShouldntBeDefined { }
//跑

$ php -f test1.php
bool(true)
为什么这是真的

当test2.php更改为任何其他形式的代码时,执行(
if(true){…}

然后它就如预期的那样工作了

$ php -f test1.php
bool(false)

PHP版本

$ php -v
PHP 5.4.7 (cli) (built: Sep 13 2012 04:20:14) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans

Return结束执行,但不停止include

在第一种情况下,包含文件,在返回并将控制权返回给
test1.php
后,执行停止。但是类被包括在内,因此类_exists返回
true
。因此,案例1的效果与预期一致


在第二种情况下,通过使用大括号,类定义成为执行的一部分。在定义类之前,返回结束include的执行

类和函数不是脚本顺序执行的一部分。return语句仅结束顺序执行,而不是oop执行。

+1用于串行向下表决器!(当然还有正确的答案)你写“但不是创造”是什么意思?它将在没有
返回
语句的情况下“创建”吗?我认为类可以被定义,也可以不被定义,而对象创建则是另一回事。你的回答很好,解释了我的怀疑。非常感谢@亚当,我的意思是实例化。但你是对的,那部分还不清楚。我删除了它。@JvdBerg您有关于此行为的PHP手册参考吗?@JvdBerg-谢谢。该页面只是说,当在全局范围中使用return时,脚本执行结束;它没有具体说明仍在解析的类声明。手册上有你知道的地方吗?我一直在寻找更具体的东西,但没有找到任何东西。谢谢你这么快的回复和简短的解释!
$ php -v
PHP 5.4.7 (cli) (built: Sep 13 2012 04:20:14) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans