0

私はcodeigniterを使用しており、コントローラーフォルダーに次のようなphpファイルを作成しました:
注:データベースを自動的に接続します。

<?php

    class Book extends CI_Controller {

        $query = $this->db->get('books');

        foreach ($query->result() as $row) {

            function $row->book_name() {
                echo $row->book_name;
            }

        }

    }

?>

データベースから本の名前を取得して関数を作成しようとしましたが、できません。関数名に $variable を使うことで、関数を作成することはできますか? そうでない場合は、どうすれば簡単に作成できますか? ありがとう...

4

3 に答える 3

4

絶対。

$myfunction = function($a,$b,$c) {return $a+$b+$c;};

これは無名関数の例です。名前はありませんが、からアクセスできます$myfunction(1,2,3)

あなたがあなたの例で何をしようとしているのか完全にはわかりません...ただecho $row->book_name一人で十分でしょうか?それとも、本と同じ名前の関数を定義しようとしていますか?後者の場合、変数変数を使用できます${$row->book_name} = function...。-しかし、それはおそらく良い考えではありません。

于 2012-06-13T22:02:01.577 に答える
4

__call()に興味があると思います。

存在しないクラスのメソッドを呼び出すと、その__call()メソッドが呼び出され、そこから呼び出しを処理できます。

__call結果を読み取るときに書籍を配列に格納し、クラスにメソッドを追加します。メソッドにアクセスすると、呼び出された関数の名前に基づいてブックの配列を検索し、適切に動作できます。

class Book extends CI_Controller {
    protected $_books = array();

    public function __construct() {
        $query = $this->db->get('books');

        foreach ($query->result() as $row) {
            $this->_books[] = $row->book_name;
        }
    }

    public function __call($name, $arguments) {
        if (in_array($name, $this->_books)) {
            echo $name;
        } else {
            ehco 'I do not have this book!';
        }
    }
}

PHP のメソッド命名規則に注意してください。有効な関数名は文字またはアンダースコアで始まり、その後に任意の数の文字、数字、またはアンダースコアが続きます。スペースは使用できませんので、ご注意ください。

于 2012-06-13T22:04:39.203 に答える
0

あなたが探しているのはcreate_function ()ですか?

しかし、真剣に、それをググるのに1分かかりました。

于 2012-06-13T22:01:23.043 に答える