CodeIgniter 是否支持命名空间?
原文由 Tejas Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议
CodeIgniter 是否支持命名空间?
原文由 Tejas Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议
实际上,您可以让名称空间与应用程序模型中的相对路径一起工作。此修改使加载模型更加容易,还允许您拥有接口……
将此添加到您的 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);
} elseif (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();
}
原文由 Timothy Perez 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
3 回答1.6k 阅读
3 回答1.2k 阅读
2 回答1.2k 阅读
命名空间由 php 支持,而不是由框架(在您的情况下为 codeigniter)支持。如果您使用命名空间,php 版本必须 >= 5.3.0 Codeigniter 不会使用命名空间,因为它是为支持 php 4 而编写的。