4

如此处所述php.net/return,有一个选项可以停止执行包含 'return' 语句。

谁能告诉我为什么这样做如下所述

// 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) { ... })

return;
{
    class TestClass_ShouldntBeDefined { }
}

然后它按预期工作

$ 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
4

2 回答 2

9

Return 结束执行,但不停止包含。

在第一种情况下,文件被包含在内,并且在返回和控制权交还给test1.php. 但是该类被包含在内,因此 class_exists 返回true。所以案例1按预期工作。

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

于 2012-10-12T07:35:57.423 回答
2

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

于 2012-10-12T07:40:14.673 回答