php 5.6起支持use function导入命名空间函数、use const导入命名空间常量,需显式声明类型;仅限命名空间内定义的函数/const,不支持全局函数或define()常量,且use作用域限于当前文件。

PHP 5.6 起,use 不仅能导入类,还能导入命名空间中的函数和常量,但必须显式声明类型——用 use function 导入函数,用 use const 导入常量。它们不是“自动识别”,而是语法强制区分。
导入命名空间函数(use function)
只有定义在命名空间中的函数(非全局函数),才能被 use function 导入。比如:
- 先定义:
namespace Helpers; function format_date($ts) { return date('Y-m-d', $ts); } - 再导入:
use function Helpers\format_date; - 之后可直接调用:
echo format_date(time());
支持起别名:use function Helpers\format_date as fmt;,然后用 fmt(time())。
导入命名空间常量(use const)
常量必须用 const 在命名空间内定义(不能是 define() 创建的全局常量):
- 定义:
namespace Config; const DB_HOST = 'localhost'; const MAX_RETRY = 3; - 导入:
use const Config\DB_HOST; use const Config\MAX_RETRY; - 使用:
echo DB_HOST . ':' . MAX_RETRY;
也支持批量导入:use const Config\{DB_HOST, MAX_RETRY};
常见误区提醒
这些操作容易出错,需特别注意:
-
use只作用于当前文件,不会传递给其他文件 -
use function无法导入未声明命名空间的函数(即根命名空间或全局函数) -
use const无法导入define('FOO', 'bar')这类动态定义的常量 - 别名冲突时,优先级:当前作用域变量 >
use导入名 > 完全限定名
不支持的场景
有些看似合理但实际无效的操作:
- 不能写
use Helpers\format_date;(缺function关键字 → 解析错误) - 不能写
use const DB_HOST;(缺完整命名空间路径 → 找不到) - 不能在条件语句中动态
use(use是编译期行为,非运行时) - 不能用
use导入 PHP 内置函数(如strlen)或魔术常量(如__FILE__)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











