我有一类静态函数(常用实用函数),我希望将其加载到codeigniter中。目前我正在使用include_once(...)
正常加载它,它按预期工作。
但是,我想使用codeigniter的方法加载它。我知道我应该将我的类文件保存到third_party目录中;并且我应该创建一个库类(将其保存在库目录中),这需要我的类。
以下是三个组件,但它不起作用。
1
// my class, saved at: APPPATH.'third_party/My_Class.php'
class My_Class
{
public static function my_static_utility_method ( )
{
return "booger" ;
}
// ...
}
2 - 我明白我应该创建一个符合“库”的CI规则的包装器。实例
// saved at: APPPATH.'libraries/Library_Wrapper.php'
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Library_Wrapper
{
public function __construct()
{
require_once APPPATH.'third_party/My_Class.php';
}
}
3 - 现在我想从我的控制器访问My_Class的静态方法:
// saved at: APPPATH.'controllers/my_controller.php'
class My_Controller extends CI_Controller
{
public function __constructor( )
{
parent::__construct();
$this->load->library( 'Library_Wrapper' ) ;
}
public function some_function()
{
echo $this->My_Class->my_static_utility_method( ) ;
}
}
答案 0 :(得分:1)
请尝试以下步骤:
创建一个新的控制器文件:{
"type": "database",
"name": "grocery",
"objects": [{
"type": "table",
"database": null,
"name": "grocery1",
"withoutRowId": true,
"ddl": "CREATE TABLE grocery1 (name CHAR (20))",
"columns": [{
"name": "name",
"type": "CHAR"
}],
"rows": [
[
"sdd"
],
[
"adddd"
],
[
"add"
],
[
"asd"
],
[
"aaa"
]
]
}]
}
。在该文件中,您可以添加静态函数。
application/core/MY_Controller.php
需要访问静态函数的控制器可以扩展此类,如:
文件:<?php
class MY_Controller extends CI_Controller {
protected function static_fn1() {
//code
}
}
:
application/controllers/Welcome.php
答案 1 :(得分:1)
你几乎已经迈出了第三步,但并不完全。加载库将使用与其加载的名称相同的名称:
//Load library
$this->load->library( 'Some_name' );
//Use Library
$this->some_name->someFunction();
因此,在您的情况下,您需要切换访问库的方法:
//Will throw an PHP undefined My_Class error
echo $this->My_Class->my_static_utility_method();
改为Library_wrapper
:
//from $this->load->library( 'Library_wrapper' );
echo $this->library_wrapper->my_static_utility_method();
但这会出现下一个问题,因为My_Class是library_wrapper
的一个属性,因此调用它会有点冗长:
echo $this->library_wrapper->My_Class->my_static_utility_method();
如果可公开访问,哪个应成功调用My_Class
后代方法。
这不像你想的那样干净。最好将My_Class
扩展为Library_wrapper
,而不是共享静态实例:
/**
* Static helper methods:
**/
class Library_wrapper extends My_Class {
}
可以将库“加载”到different name(请参阅“将库分配给其他对象名称”标题)。
答案 2 :(得分:0)
您可以尝试以下解决方案:
在此层次结构中$ this-&gt; library_wrapper-&gt; My_Class-&gt; my_static_utility_method();
使用Php Functions中列出的php函数查找层次结构中每个点的方法/变量。这将指出事情出错的确切位置。
答案 3 :(得分:0)
我认为你不需要构建一个类。最简单的方法是帮助(&#34; Helpers,顾名思义,帮助您完成任务。每个帮助文件只是特定类别中的函数集合&#34; - 只是阅读来自official tutorial的文章。
名称为arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -ffreestanding -fno-move-loop-invariants -Werror -Wunused -Wuninitialized -Wall -Wextra -Wmissing-declarations -Wconversion -Wpointer-arith -Wpadded -Wshadow -Wlogical-op -Waggregate-return -Wfloat-equal -T mem.ld -T libs.ld -T sections.ld -nostartfiles -Xlinker --gc-sections -L"config/linker" --specs=nano.specs -L/home/tkl/git/engine_control/source/os/release -Wl,-Map,"/home/tkl/git/engine_control/release/map/arm/release/.map" -lkosmos-arm-stm32f4-discovery -o "/home/tkl/git/engine_control/release/execute/arm/release/.elf"
的帮助文件将位于myfunctions_helper.php
文件夹中,并且可能具有以下结构:
/application/helpers
然后,您可以自动加载帮助程序,将其声明为<?php
defined('BASEPATH') OR exit('No direct script access allowed');
if (!function_exists('my_static_fuction')) {
function my_static_fuction ( )
{
return "booger" ;
}
}
// etc...
。
/application/config/autoload.php
如果你需要构建一个类,那么像@MackieeE所写的库将完成这项工作(check the tutorial以获取更多信息)。