Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在控制器内导入自定义类_Php_Oop_Cakephp_Namespaces_Cakephp 3.0 - Fatal编程技术网

Php 在控制器内导入自定义类

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在当前名称空间中查找它,即它将

我在Cake项目的Controller文件夹中创建了一个类,如下所示:

<?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