我在文件夹中调用AbstractClass.php的libraries文件中有以下代码
abstract class AbstractClass {
abstract protected doSomething ();
}
class ConcreteClass extends AbstractClass {
public function doSomething () {};
}
Run Code Online (Sandbox Code Playgroud)
当我尝试加载AbstractClassfrom时controllers如下:
$this->load->library('AbstractClass');
Run Code Online (Sandbox Code Playgroud)
我收到Unable to load the requested class: AbstractClass错误.
我究竟做错了什么?我应该只包含文件而不是加载它吗?
谢谢
Phi*_*eon 14
很明显,你不能直接加载一个抽象类,因为这与抽象类的观点相悖.
您可以将一个抽象类与另一个库一起放在一个文件中,但这有点毫无意义,并且违背了CI(以及所有良好标准)建议的"一级一档"标准.
您可以在库文件中包含此文件包含include(),也可以设置__autoload()函数来为您执行此操作.__autoload()的最佳位置是config.php的底部.
我将抽象类与 CodeIgniter 库一起使用,因为我有一些通用方法,我希望所有继承的类都使用这些方法,而这些方法本身毫无意义。我不知道我要建议的是否是最佳实践。我怀疑它不是,但我个人认为它很有用。我是这样做的:
在 CodeIgniter 应用程序文件夹中创建一个新的类文件夹。
将此文件夹添加到路径中。(我通常在控制器中执行此操作。)
if (!strstr(get_include_path(), APPPATH . 'classes')) {
ini_set('include_path', get_include_path() . ':' . APPPATH . 'classes');
}
Run Code Online (Sandbox Code Playgroud)在类文件夹中创建抽象类或其他类。
创建扩展的 CodeIgniter 库:
require_once('an_abstract_class.php');
class concrete_library extends an_abstract_class {
Run Code Online (Sandbox Code Playgroud)正常使用该库:
$this->load->library('concrete_library');
Run Code Online (Sandbox Code Playgroud)这应该够了吧。我希望这有用。
| 归档时间: |
|
| 查看次数: |
8076 次 |
| 最近记录: |