# 使用命名空间 - 后备全局函数和常量

一个命名空间中，当 PHP 遇到一个非限定的类，函数或常量名称时，它使用不同的优先策略来解析该名称。类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时，必须使用完全限定名称。

```php
<?php

namespace Foo;

class ArrayObject extends \ArrayObject
{
    //
}

var_dump(new ArrayObject());  // object(Foo\ArrayObject)#1 (1) { ["storage":"ArrayObject":private]=> array(0) { } }
var_dump(new \ArrayObject()); // object(ArrayObject)#1 (1) { ["storage":"ArrayObject":private]=> array(0) { } }
var_dump(new stdClass());     // PHP Fatal error:  Uncaught Error: Class 'Foo\stdClass' not found.

```

如果命名空间中的函数或常量未定义，则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。

```php
<?php

namespace Foo;

require __DIR__ . '/example.php';
var_dump(foo()); // string(3) "foo"
var_dump(FOO);   // string(3) "foo"

```

上例中的 `example.php` 文件内容：

```php
<?php

/**
 * Return a string.
 *
 * @param  void
 * @return string
 */
function foo(): string
{
    return 'foo';
}

const FOO = 'foo';

```

