Tim*_*rez 31
实际上,您可以使命名空间与应用程序模型中的相对路径一起使用.这种修改使加载模型更容易,并允许您拥有接口...
将其添加到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)