Пространство имен в PHP CodeIgniter Framework

Поддерживает ли CodeIgniter пространство имен?

Пространство имен поддерживается php, а не каркасом (codeigniter в вашем случае). Если вы используете пространства имен, версия php должна быть> = 5.3.0. Codeigniter dosen`t использует пространства имен, потому что он написан для поддержки php 4.

Как получить пространство имен для работы в 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'); } }); 

Пример Namespaced Класс:

 <?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(); }