CI2 中的共享函数:帮助程序?图书馆



我对OOP还很陌生,并且一直在使用CodeIgniter2 + Doctrine2学习。

我有几个共享函数,在我的项目的各个领域都很方便,所以我想调用它们。 在过程式PHP中,我只是将它们放在库文件中并调用它们。 但这现在对我不起作用..

include 'function_library.php';
$name = $this -> function_library -> generate_male_name();

消息:未定义的属性:turn::$function_库

我什至在某处读到您需要使用call_function(),但这只会让我:

致命错误:调用未定义的方法 Turn::call_function()

所以我想也许我应该将其加载为助手。

$this->load->helper('character_helper');
echo generate_male_name();

致命错误:不在对象上下文中使用$this /PATH/systemFolder/helpers/character_helper.php 在第 19 行

第 19 行:

$query = $this->doctrine->em->createQuery("select max(u.id) from ORM\Dynasties2\Malenames u");

我考虑过将其设置为图书馆,但老实说,在类等方面,这开始有点超出我的头脑。 我还没有尝试过。

以下是该函数的全部内容:

function generate_male_name() {
        $query = $this->doctrine->em->createQuery("select max(u.id) from ORMDynasties2Malenames u");
         $result = $query->getSingleResult();
         //echo $result2[1];
         $highval = $result[1];
         $random_name = rand(1,$highval);
         //echo $random_name;
         $name = $this->doctrine->em->find('ORMDynasties2Malenames', $random_name);
         return $name->getName();     
    }

我该怎么做?

编辑:

尝试了一些额外的事情,仍然没有成功。

我把我的function_library放在third_party,然后做了:

$this->load->add_package_path(APPPATH.'third_party/function_library/');
$name = $this -> generate_male_name();

致命错误:调用未定义的方法 Turn::generate_male_name()

$name = $this -> function_library -> generate_male_name();

消息:未定义的属性:turn::$function_库

我对在自动加载机中调用它并不疯狂,我不需要到都使用它,而且这似乎效率不高。

我已经阅读了图书馆,但正如我所说,课程很快就会超过我的头脑,创建一个新的图书馆对我来说似乎有点令人生畏。

*这里最好的解决方案是什么? 如何共享一些功能? 图书馆是我需要走的路,还是我只是在尝试让助手或shared_functions东西工作时错过了一些小东西?

可能

不是答案,只是在谈论CodeIgniter

致命错误:不在对象上下文中使用$this /PATH/systemFolder/helpers/character_helper.php 在第 19 行

当您尝试在对象上下文之外将CI实例与$this关键字一起使用时(当CI未实例化时),会发生这种情况。观察上面的错误,我可以猜到您正在使用位于helpers文件夹内但在对象上下文之外CI帮助程序character_helper.php内的$this。若要使用CI对象,CI必须使用

$ci = & get_instance();

并在助手中使用$ci而不是$this

如果您想在任何控制器中使用您的助手,那么您可以像往常一样在控制器中正常加载它,即

$this->load->helper('character_helper');

如果您的助手具有generate_male_name函数,那么您可以在控制器中调用它,如下所示

generate_male_name();

但是,$this只能直接在您的控制器中工作,即您的 模型或您的视图。

创建代码点火器库。

相关内容

最新更新