【问题标题】:Unable to load "use" statement in Codeigniter无法在 Codeigniter 中加载“使用”语句
【发布时间】:2017-01-05 23:57:46
【问题描述】:

我在本机 php 应用程序中有此代码。

 use Elasticsearch\ClientBuilder;
 require 'vendor/autoload.php';

我正在将此应用程序转换为 Codeigniter。现在,当我将上面的代码粘贴到 CI 中时,它给了我错误。我已经用以下语句修复了所需的部分错误。

require_once APPPATH."third_party/elasticsearch/vendor/autoload.php";

但我无法修复

use Elasticsearch\ClientBuilder;

它不断给我语法错误。有人知道怎么解决吗?

请帮忙。 谢谢

【问题讨论】:

  • 当我包含 dompdf 库时,我在使用语句中也遇到了错误。我通过在课前移动代码开头的 require 和 use 来解决错误。
  • 所以在你的情况下首先在 if ( ! defined('BASEPATH')) exit('No direct script access allowed'); require_once APPPATH."third_party/elasticsearch/vendor/autoload.php";然后使用 Elasticsearch\ClientBuilder;然后是类声明...

标签: php codeigniter


【解决方案1】:

简单的方法是使用 config/autoload.php 文件。将您的代码作为库,并使其自动加载。

但是如果你要导入很多类,这不是一个实用的方法。这是我所做的: 我专门为我自己的文件和库创建了一个文件夹,为其命名,并使其自动加载。

现在假设您将文件放在 MyProject 文件夹中,并且名称空间与路径匹配。像 MyProject/Bases/Class1.php 有命名空间 MyProject/Bases。

然后在 config/config.php 文件的末尾添加此代码。

spl_autoload_extensions('.php'); // Only Autoload PHP Files

spl_autoload_register(function($classname){
    
    if( strpos($classname,'\\') !== false ){
        // Namespaced Classes
        $classfile = /*strtolower(*/str_replace('\\','/',$classname)/*)*/;
        
        if($classname[0] !== '/'){
            $classfile = APPPATH.''.$classfile.'.php';
        }
        
        require($classfile);
        
    } else if( strpos($classname,'interface') !== false ){
        // Interfaces
        strtolower($classname);
        require('application/interfaces/'.$classname.'.php');
    }
    
});

这段代码自动加载应用程序目录中命名空间的所有文件。现在你可以添加任何你想要的文件,根据它的目录路径命名它,并在你的类中“使用”它。

感谢 Thimothy Perez 的回答 here

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 2022-07-05
    • 2020-05-15
    相关资源
    最近更新 更多