2012-04-23 28 views
1

我對OOP還很陌生,並且一直在用CodeIgniter2 + Doctrine2進行學習。CI2中的共享函數:Helper?圖書館?

我有幾個方便在我的項目的各個領域的共享函數,所以我想給他們打電話。在程序PHP中,我只是將它們粘在一個庫文件中並調用它們。但是,這不是爲我工作現在..

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

Message: Undefined property: Turn::$function_library

我甚至看的地方,你需要使用call_function(),但只得到了我:

Fatal error: Call to undefined method Turn::call_function()

所以我想,也許我應該加載它作爲一個幫手。

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

Fatal error: Using $this when not in object context in /PATH/systemFolder/helpers/character_helper.php on line 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 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(); 

Fatal error: Call to undefined method Turn::generate_male_name()

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

Message: Undefined property: Turn::$function_library

我不是瘋了有關調用它自動加載,我並不需要它無處不在,這似乎效率不高。

我已經閱讀過圖書館,但正如我所說,類很快就在我的頭上,創建一個新的圖書館似乎不僅僅是對我來說有點令人生畏。

* 這裏最好的解決方案是什麼?我如何分享幾個功能?是一個圖書館,我需要去,還是我只是失去了一些東西在試圖使一個幫手或shared_functions事工作未成年人的方式嗎?*

+0

嘗試自動加載配置文件中的幫助程序。你也可以嘗試將你的圖書館放在third_party文件夾中,加載並從那裏調用它。 – Lowkase 2012-04-23 13:09:26

+1

在codeigniter中,您可以使用 $ ci =&get_instance();調用codeigniter的實例。 不確定關於教義雖然 – allen213 2012-04-23 13:18:51

+0

http://codeigniter.com/user_guide/general/creating_libraries.html – allen213 2012-04-23 13:19:52

回答

0

可能不是一個答案,只談論CodeIgniter

Fatal error: Using $this when not in object context in /PATH/systemFolder/helpers/character_helper.php on line 19

當您試圖在對象上下文之外使用CI實例和$this關鍵字(未實例化CI時)時會出現這種情況。觀察上面的錯誤我可以猜測,您正在使用$this裏面的助手character_helper.php位於helpers文件夾內但CI對象上下文之外。要使用CI對象必須使用

$ci = & get_instance(); 

實例化CI和你的助手使用$ci代替$this

如果你想使用任何控制器內部的助手,那麼就可以正常加載控制器照常內,即

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

,如果你的助手的功能generate_male_name,那麼你可以把它叫做你的控制器內如下

generate_male_name(); 

$this, however, only works directly within your controllers, your models, or your views.

Creating CodeIgniter Libraries.