Как заставить пространства имен работать в Codeigniter
На самом деле вы можете заставить пространства имен работать совместно с относительными путями в ваших моделях приложений. Эта модификация значительно упрощает загрузку моделей, а также позволяет создавать интерфейсы ...
Добавьте это в конец вашего приложения / 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');
}
});
Пример класса пространства имен:
<?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;
}
}
Пример использования класса в вашем коде где-то:
ВАЖНОЕ ПРИМЕЧАНИЕ: НЕ ИСПОЛЬЗУЙТЕ СОЗДАНИЕ В CI_Loader (например: $ this-> load-> model ();)
// This will Autoload Your Namespaced Class
$example = new foo\Bar();
или в качестве альтернативы вашему классу PHP (например, контроллер, другая модель), вы можете сделать это ...
<?php
...
use foo\Bar as FooBar;
...
// Then you can just do this
$example = new FooBar();
Пример интерфейса:
<?php
// File: application/interfaces/awesome_interface.php
interface Awesome_interface {
public function getFoobar();
}