この記事では、php __call メソッドの使用手順を紹介します。php __call メソッドを学習する必要がある人は、参考にしてください。 PHP に触れ始めたばかりの子どもたちは、魔法のメソッド __call を参考書で目にしたり、その応用例を見たことがあると思います。しかし、実際にコードを書き始めるとき、それを使ったことがありますか? ?正直に言うと、私は PHP をしばらく使ってきましたが、実際の開発に適用したことはありませんでした。
最初に __call の機能について話しましょう: 「PHP5 オブジェクトには新しい特別なメソッドがあります。このメソッドは、オブジェクト内の他のメソッドを監視するために使用されます。オブジェクトに存在しないメソッドを呼び出そうとすると、__call メソッドが呼び出されます。自動的に「
」と呼ばれます。典型的な使用例:
コードは次のとおりです | コードをコピー |
runTest('オブジェクト コンテキスト内'); |
代码如下 | 复制代码 |
/** +---------------------------------------------------------- * 利用__call方法实现一些特殊的Model方法 +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $method 方法名称 * @param array $args 调用参数 +---------------------------------------------------------- * @return mixed +---------------------------------------------------------- */ public function __call($method,$args) { if(in_array(strtolower($method),array('field','table','where','order','limit','page','alias','having','group','lock','distinct'),true)) { // 连贯操作的实现 $this->options[strtolower($method)] = $args[0]; return $this; }elseif(in_array(strtolower($method),array('count','sum','min','max','avg'),true)){ // 统计查询的实现 $field = isset($args[0])?$args[0]:'*'; return $this->getField(strtoupper($method).'('.$field.') AS tp_'.$method); }elseif(strtolower(substr($method,0,5))=='getby') { // 根据某个字段获取记录 $field = parse_name(substr($method,5)); $where[$field] = $args[0]; return $this->where($where)->find(); }else{ throw_exception(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_')); return; } } |
まず、コードの具体的な機能については説明しません。第 2 に、コード内のプログラミングのアイデアを調べることで学ぶべき価値がまだたくさんあります。
彼の呼び出し方について話せば、彼がいかに「強力」であるかがわかります。
電話:
$this->dao= M('table'); // テーブル モデルの高速かつ高パフォーマンスなインスタンス化
$this->dao->field($field)->where($where)->limit($offset . ',' . $limit)->select(); // クエリフィールドを設定します。 , クエリ条件、クエリ数量を設定し、最後にクエリ操作を実行します。もちろん、返されるのはデータベースのレコードです
「何かが間違っている」を参照してください。field メソッドがオブジェクトになり、where、limit、select メソッドもオブジェクトになりました。実際、field メソッドと where メソッドは Model クラスに存在しません。これらのメソッドが存在しないため、この時点で __call メソッドが実行され、$this オブジェクトが返されます。したがって、この「接続」の記述方法が実現でき、1行のコードですべてのSQL文を扱うことができます。
これ以上は説明しません。__call メソッドの実際の応用例を紹介するだけです。完全に理解したい場合は、thinkphp のソースコードを自分で見ることをお勧めします。 (免責事項: 私は thinkphp とは何の関係もありません。また、その良さを主張しているわけでもありません)