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インスタンスを使用しようとした場合に発生します(インスタンス化されていない場合)。上記のエラーを観察すると、フォルダー内にあるがオブジェクトコンテキストの外にあるヘルパーの内部を使用していると推測できます。オブジェクトを使用するには、使用をインスタンス化する必要があります$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 に答える