未找到php类,但已导入

未找到php类,但已导入,php,Php,我有两个文件,第一个是Test.php,如下所示: <?php namespace My\Namespaces\Test; class Test { const ALERT_EMAIL = "AlertEmail"; const ALERT_SMS = "AlertSms"; const ALERT_NOTIFICATION = "AlertNotification"; } // class - EnumAlertType ?> 另一个文件尝试使用T

我有两个文件,第一个是Test.php,如下所示:

<?php
namespace My\Namespaces\Test;

class Test {
    const ALERT_EMAIL = "AlertEmail";
    const ALERT_SMS = "AlertSms";
    const ALERT_NOTIFICATION = "AlertNotification";
}  // class - EnumAlertType
?>

另一个文件尝试使用Test.php中的const

<?php
use My\Namespaces\Test;
$a = Test::ALERT_SMS;
?>


但是我仍然得到
类'My\Namespaces\Test'未找到
错误,我不确定是否正确使用了名称空间。谢谢

您需要在这里区分两个术语:包括和导入。前者是在当前正在执行的脚本中添加代码,后者是在代码中轻松使用它们。包括随意复制将代码粘贴到当前脚本,以便以后可以使用

因此,您需要将类
Test
的代码包含到将使用该代码的文件中(
require_once()
)。实际上,您可以在以后导入它(尤其是当文件位于单独的文件夹中时)。因此,您需要执行以下操作:

<?php
require_once('Test.php'); // include the code
use My\Namespaces\Test; // import it if you want but not useful as the two file are in the same folder
$a = Test::ALERT_SMS; // access to class constants

在第二个示例中打开问题时,我假设这是一个输入错误(
名称空间
vs
名称空间
),对吗?无论如何,您是否正确配置了自动加载(因为我在代码中没有看到任何提及手动包含的内容)?如果您将
include()
文件而不是
使用
类,可能会重复使用类的全名。这里可能会出现
My\namespace\Test\Test
。要获得该常数,必须执行以下操作:
My\Namespaces\Test\Test::ALERT\u SMS
。名称空间就像硬盘上的文件夹,任何定义的类都像文件
My\Namespaces\Test
是文件夹,
Test
是文件。@SverriM.Olsen:命名空间就像指向类路径的文件夹一样。因此,
My\Namespaces\Test
代表一个类,而不是一个文件夹。嗨,我试过使用require_一次,效果很好,非常感谢。但我仍然感到困惑,当我使用symfony框架时,我可以直接导入其他类,而无需require_once(),我不确定symfony是否有任何区别。。就像ZF和其他任何框架一样,我敢肯定,如果它解决了您的问题,您是否考虑过接受这个答案?“导入”在这里使用起来很混乱;别名将是正确的术语。