Поддерживает ли CodeIgniter пространство имен?Пространство имен в PHP CodeIgniter Framework
ответ
Пространство имен поддерживается php, а не каркасом (codeigniter в вашем случае). При использовании пространств имен PHP версия должна быть> = 5.3.0 CodeIgniter использование dosen`t пространств имен, потому что она написана для поддержки PHP 4.
Обнаружен обходной путь: http://porquero.blogspot.com/2012/03/codeigniter-hmvc-namespaces-part-1.html –
Как получить Namespaces работать в 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;
}
}
Пример Инстанцирование класса в коде Somewhere:
ВАЖНОЕ ЗАМЕЧАНИЕ: НЕ ИСПОЛЬЗУЙТЕ ПОСТРОИТЬ В 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();
}
после нескольких изменений в классах классов 'spl_autoload_register' загрузки без ошибок. Thx –
Добро пожаловать. –
@TimothyPerez Есть ли другой способ загрузить библиотеки, имеющие пространство имен в CodeIgniter 3? – sam
Вы можете проверить это: yidas/codeigniter-psr4-autoload
Th е Lib определяет app
как корень приложения CI таким образом, что каждые классы приложения могут быть загружены с PSR-4 имен:
\app\libraries\MemberService::auth();
\app\helpers\ArrayHelper::indexBy($input);
\app\widgets\StatWidget::run();
class Blog_model extends app\core\BaseModel {}
class Car_model implements app\contracts\CarInterface {}
Пример кода для определения класса:
<?php
namespace app\helpers;
class ArrayHelper
{
public static function indexBy($input) {}
}
- 1. PHP: пространство имен: Framework
- 2. (codeigniter/Neo4j) PHP: пространство имен и автозагрузчик
- 3. Пространство имен в php-приложении
- 4. Zend Framework 2 Недопустимое пространство имен
- 5. Entity Framework namespaces - контекстное пространство имен
- 6. Simple-Framework: повторяющаяся аннотация (другое пространство имен)
- 7. php framework Codeigniter
- 8. PHP пространство имен и включает
- 9. PHP-пространство имен, называемое «Public»
- 10. PHP пространство имен Неопределенная функция
- 11. Пространство имен php по умолчанию
- 12. Массив в php codeigniter framework
- 13. Автозагрузка и Пространство имен PHP
- 14. Устаревшее полное пространство имен?
- 15. PHP: Добавить объект в пространство имен globale
- 16. Как реализовать вложенное пространство имен в PHP?
- 17. сделать пространство имен обратную совместимость в PHP
- 18. Пространство имен в php под xampp
- 19. Как использовать пространство имен в PHP
- 20. пространство имен PhP в идентичных конфигурациях
- 21. PHP - установить пространство имен в SoapClient
- 22. Пространство имен Stripe, дающее ошибку в php
- 23. Как тайному пространство имен PHP в JSON
- 24. Как использовать пространство имен в php?
- 25. PHP включает файл в пользовательское «пространство имен»
- 26. Пространство имен и классы в php
- 27. Пространство имен элемента, объявляющего пространство имен?
- 28. Пространство имен IInvokeProvider?
- 29. php5 и пространство имен?
- 30. Пространство имен для сеялок
Лучше задать вопрос, зачем они вам нужны? Я вообще называю «пространство имен» кодом с префиксами или суффиксами. Например, $ this-> user_lib или $ this-> user_m означает, что вы не столкнетесь ни с чем другим. Я бы ДЕЙСТВИТЕЛЬНО хотел, чтобы CI поддерживал Controller_Foo, но это не скоро произойдет: -/ –