Tim*_*rez 31

如何在Codeigniter中获取命名空间

实际上,您可以使命名空间与应用程序模型中的相对路径一起使用.这种修改使加载模型更容易,并允许您拥有接口...

将其添加到application/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.'models/'.$classfile.'.php';
        }               
        require($classfile);
    } else if( strpos($classname,'interface') !== false ){
        // Interfaces
        strtolower($classname);
        require('application/interfaces/'.$classname.'.php');
    }

});
Run Code Online (Sandbox Code Playgroud)

示例命名空间类:

<?php
// File: application/models/foo/bar.php
namespace foo;

class Bar extends \CI_Model implements \Awesome_interface {

    public $foobar;

    public function __construct() {
        return parent::__construct();
    }

    public function getFoobar() {
        return $this->foobar;
    }

    public function setFoobar($val) {
        $this->foobar = $val;
    }

}
Run Code Online (Sandbox Code Playgroud)

您的代码中的类实例化实例:

重要说明:不要在CI_Loader中使用内置(例如:$ this-> load-> model();)

// This will Autoload Your Namespaced Class
$example = new foo\Bar();
Run Code Online (Sandbox Code Playgroud)

或者在你的PHP类之上(例如:控制器,其他模型),你可以这样做......

<?php
...
use foo\Bar as FooBar;

...

// Then you can just do this
$example = new FooBar();
Run Code Online (Sandbox Code Playgroud)

接口示例:

<?php
// File: application/interfaces/awesome_interface.php
interface Awesome_interface {

    public function getFoobar();

}
Run Code Online (Sandbox Code Playgroud)


ada*_*axa 19

命名空间由php支持,而不是由框架支持(在您的情况下为codeigniter).如果使用名称空间php版本必须> = 5.3.0 Codeigniter dosen`t使用名称空间,因为它是为了支持php 4而编写的.


小智 5

只需简单的 psr-4 自动加载即可完成。

在加载编辑器中config/config.php使用

$config['composer_autoload'] = FCPATH.'vendor/autoload.php';
Run Code Online (Sandbox Code Playgroud)

在根目录中运行composer install 在生成的文件中composer.json添加以下行以进行 psr4 自动加载。

    "autoload": {
        "psr-4": {
            "App\\": "application/"
        }
    },  
Run Code Online (Sandbox Code Playgroud)

App在这种情况下将是您的名称空间。

示例:假设您Service在库文件夹中有一个类。您可以使用以下命令命名它:

<?php
namespace App\libraries;

class Service{
}
Run Code Online (Sandbox Code Playgroud)

Welcome在控制器类中使用它:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use App\libraries\Service;
class Welcome extends CI_Controller {
}
Run Code Online (Sandbox Code Playgroud)