1

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

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

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

消息:未定义属性:Turn::$function_library

我什至读过你需要使用的地方call_function(),但这只让我:

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

所以我想也许我应该把它作为一个助手加载。

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

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

第 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 ORM\Dynasties2\Malenames u");
         $result = $query->getSingleResult();
         //echo $result2[1];
         $highval = $result[1];
         $random_name = rand(1,$highval);
         //echo $random_name;
         $name = $this->doctrine->em->find('ORM\Dynasties2\Malenames', $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_library

我并不热衷于在自动加载器中调用它,我不需要在任何地方使用它,这似乎效率不高。

我已经阅读了有关库的内容,但正如我所说,类很快就让我头晕目眩,创建一个新库对我来说似乎有点令人生畏。

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

4

1 回答 1

0

可能不是答案,只是说说而已CodeIgniter

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

当您尝试在对象上下文之外使用CI带有关键字的实例时(未实例化时),就会发生这种情况。观察上面的错误,我可以猜测您正在使用位于文件夹内但在对象上下文之外的帮助程序。要使用对象,您必须实例化using$thisCI$thischaracter_helper.phphelpersCICICI

$ci = & get_instance();

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

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

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

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

generate_male_name();

然而,$this 只能直接在你的控制器、模型或视图中工作。

创建 CodeIgniter 库。

于 2012-04-23T14:00:11.083 回答