Php 在控制器内导入自定义类
我在Cake项目的Controller文件夹中创建了一个类,如下所示:Php 在控制器内导入自定义类,php,oop,cakephp,namespaces,cakephp-3.0,Php,Oop,Cakephp,Namespaces,Cakephp 3.0,我在Cake项目的Controller文件夹中创建了一个类,如下所示: <?php class Hi { function __construct(){ } public function hi() { echo "hi!"; exit; } } 包含文件不会使该文件中的类成为当前命名空间的一部分,因为命名空间是每个文件的功能 您的Hi类将在全局名称空间中声明,您的new Hi()将使PHP在当前名称空间中查找它,即它将
<?php
class Hi
{
function __construct(){ }
public function hi()
{
echo "hi!";
exit;
}
}
包含文件不会使该文件中的类成为当前命名空间的一部分,因为命名空间是每个文件的功能 您的
Hi
类将在全局名称空间中声明,您的new Hi()
将使PHP在当前名称空间中查找它,即它将查找不存在的App\Controller\Hi
,因此将启动composer autoloader,并将通过PSR-4名称空间前缀匹配将其映射到src/Controller/Hi.php
,这将再次包含该文件,这就是它发生的时候
长话短说,虽然使用new\Hi()
可以解决这个问题,但最好不要手动包含类文件,或者在它们不属于的路径中声明它们。而是以适当的自动加载兼容方式声明文件和类,例如,在与该名称空间匹配的路径中使用适当的名称空间,如
namespace App\Utils;
class Hi {
// ...
}
在
包含文件不会使该文件中的类成为当前名称空间的一部分,因为名称空间是每个文件的功能 您的
Hi
类将在全局名称空间中声明,您的new Hi()
将使PHP在当前名称空间中查找它,即它将查找不存在的App\Controller\Hi
,因此将启动composer autoloader,并将通过PSR-4名称空间前缀匹配将其映射到src/Controller/Hi.php
,这将再次包含该文件,这就是它发生的时候
长话短说,虽然使用new\Hi()
可以解决这个问题,但最好不要手动包含类文件,或者在它们不属于的路径中声明它们。而是以适当的自动加载兼容方式声明文件和类,例如,在与该名称空间匹配的路径中使用适当的名称空间,如
namespace App\Utils;
class Hi {
// ...
}
在
不知道,但什么是
$a.hi()代码>???只是为了测试…现在我明白了哈哈哈。。。它是$a->hi()代码>不知道,但什么是$a.hi()代码>???只是为了测试…现在我明白了哈哈哈。。。它是$a->hi()代码>
src/Utils/Hi.php