1

当我在自定义命名空间的类中使用 PHP 类Normalizer(例如\Normalizer::normalize($string, Normalizer::FORM_KD);)时,出现以下错误:Text.phpUtils

Fatal error: Class 'Utils\Normalizer' not found 
in C:\xampp\htdocs\MyProject\src\Utils\text.php on line 380

我的项目使用PHP 5.4.4在XAMPP下运行。我也知道:

  • Normalizer应该从PHP 5 >= 5.3.0开始工作。
  • 在我的文件php_intl.dll中启用了扩展。php.ini

我错过了什么?

4

1 回答 1

1

您忘记了前导反斜杠Normalizer::FORM_KD调用\Normalizer::normalize($string, Normalizer::FORM_KD)通知时,您只在类名前面使用了一个反斜杠,但在使用类常量时却没有。

在 PHP 中,当您声明或导入名称空间时,您是在告诉 PHP 将您的所有函数、类/接口和常量名称命名为您的名称空间。

所以下面的代码会发出类似的致命错误......

<?php
namespace foo;

var_dump(DateTime::createFromFormat('Y-m-d','2012-12-06'));

上面的代码会发出一个错误PHP Fatal error: Class 'foo\DateTime' not found in /testfile.php on line 4

要解决此问题,请确保始终将未在命名空间/别名中声明的那些函数/类/接口/常量调用到全局命名空间。

<?php
namespace foo;
/* Notice the leading backslash infront of DateTime*/
var_dump(\DateTime::createFromFormat('Y-m-d','2012-12-06'));
于 2012-12-06T10:47:06.717 回答