我对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只能直接在您的控制器中工作,即您的 模型或您的视图。
创建代码点火器库。