无法在 PHP 中导入/使用命名空间函数
我有一个名为 test.php 的命名空间文件,其中包含一个函数和一个类:
namespace Test;
function testFunc(){}
class TestClass{}
然后,如果在另一个文件中我“使用”这两个命名空间元素,则该类可以工作,但该函数不起作用:
use Test\testFunc,
Test\TestClass;
include "test.php";
new TestClass();
testFunc();
TestClass 对象创建得很好,但是我收到 testFunc() 的致命错误:
Fatal error: Call to undefined function testFunc()
我认为命名空间支持函数。我做错了什么?
编辑:此处的说明 - http://www.php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.nofuncconstantuse
I've got a namespaced file called test.php with a function and a class:
namespace Test;
function testFunc(){}
class TestClass{}
Then if, in another file I "use" both of these namespace elements, the class works but not the function:
use Test\testFunc,
Test\TestClass;
include "test.php";
new TestClass();
testFunc();
The TestClass object is created fine, but I get a fatal error for testFunc():
Fatal error: Call to undefined function testFunc()
I thought functions were supported with namespaces. What am I doing wrong?
EDIT: Explanation here - http://www.php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.nofuncconstantuse
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
请参阅http://php.net/manual/en/language.namespaces.rules。 php 特别注意:
并且
See http://php.net/manual/en/language.namespaces.rules.php with particular attention to:
And
从 PHP 5.6 及更高版本,您可以导入/使用其他 PHP 文件中的函数,如下所示:
但是,对于 PHP 7.0,我需要将该函数添加到composer.json 中的“文件”中:
然后运行 composer dump-autoload 更新 autoload.php。
或者:
您也可以直接从脚本导入函数,而无需编写器:
但是(至少对我来说)这只在 ScriptWithMyFunc.php 没有命名空间时才有效。
From PHP 5.6 and higher you can import/use functions from other PHP files as follows:
However, for PHP 7.0, I needed to add the function to "files" in the composer.json:
And then run
composer dump-autoload
to update autoload.php.ALTERNATIVELY:
You can also import functions from scripts directly without composer:
But (at least for me) this only works when ScriptWithMyFunc.php does not have a namespace.
我相信命名空间函数(函数和常量的
use
关键字的端口)将成为 PHP 5.6 的一部分另请参阅:
https://github.com/php/php-src/pull/526
https://wiki.php.net/rfc/use_function
I believe namespaced functions (port of
use
keyword for function and constants) will be part of PHP 5.6See also:
https://github.com/php/php-src/pull/526
https://wiki.php.net/rfc/use_function