As stated here [php.net/return](http://php.net/return), there is an option to stop executing include with 'return' statement.

Who can tell me why this works as stated below

// test1.php

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

```

// test2.php

```
return;
class TestClass_ShouldntBeDefined { }

```

// run

```
$ php -f test1.php
bool(true)

```

Why this is true?

When test2.php is changed to any other form of code execute (`if(true) { ... }`)

```
return;
{
    class TestClass_ShouldntBeDefined { }
}

```

then it works as expected

```
$ php -f test1.php
bool(false)

```

PHP version

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

```