ホームページ >バックエンド開発 >PHPチュートリアル >PHP の BigerFly 1. 匿名関数を使用してフォーム データ処理をクールにする

PHP の BigerFly 1. 匿名関数を使用してフォーム データ処理をクールにする

WBOY
WBOYオリジナル
2016-06-20 12:30:191022ブラウズ

Muyou bigFly についてこれは Mumu の最初の PHP シリーズです biggerFly翻訳は Bi Ge Fei~ Qi です。PHP なのでここにありますキャメルケースネーミング 名前の意味の通り、すごいPHPの使い方を教える連載です823db3943044a0a9a620ada8d4b1d965もちろん、昔はすごいと思っていたこともありますが、結果は変わってきましたf6236f917cb4ada62f5c34ba44124864Mumu の想像力は常にそうであるため、最後にこれらのコードについていくつかコメントします。Mumu がおかしくなるのを見たくない場合は、他のシリーズにジャンプしてください。ポータルは最後にあります。最初の号のメイン トピックに入ります。

要件

フォーム データを受信し、フォーマットして処理し、データベースに挿入します。

シミュレーション

フォームで送信されたデータを想定します

$postData = [  ['name' => 'name1', 'createtime' => '2000-01-01', 'email' => 'email1@example.com' ],  ['name' => 'name2', 'createtime' => '2000-02-01', 'email' => 'email2@example.com' ],  ['name' => 'name3', 'createtime' => '2000-03-01', 'email' => 'email3@example.com' ],  ['name' => 'name4', 'createtime' => '2000-04-01', 'email' => 'email4@example.com' ],];

通常の練習

function format( $data ) {  $format = $data;  $format['createtime'] = strtotime( $data['createtime'] );  return $format;}

もちろん、上記は参照に置き換えることもできます 参照はメモリのオーバーヘッドを減らすことができます~

No bigFly

(スクリプトを読み込んでいます...) Mumu: 今回は必要なフォーマット メソッドをあまり書きたくないのです。フォームを送信するためのフォーマットを書いて、次回また別の場所にフォーマットが必要になるたびに定義するのが面倒ですよね?検証のための validate メソッドやその他の abc メソッドがある場合は... ああ、勘弁してください: 匿名関数を試してみてはどうでしょうか。むむ:え?匿名関数とは一体何でしょうか? biggerFly: 匿名関数ポータルはここにあります。行きましょう Mumu: とてもめまいがするので、どうすればよいか教えてください...biggerFly:

class A {  public $data = NULL;  public $format = NULL;  /**  * 执行  */  public function run() {    foreach ( $this->data as $key => &$data ) {      if ( is_callable( $this->format ) ) {        $method = $this->format;//必须赋值给一个变量,不然会报错:format方法不存在        $method( $data );      }    }  }  /**  * 设置data数组  * @param array $data  */  public function setData( $data ) {    $this->data = $data;    return $this;  }  /**  * 获取data数组  * @return array  */  public function getData() {    return $this->data;  }}

Mumu: それでどうですか。 ? ? bigFly の使い方: シミュレーション を例にします

$a = new A();$a->setData( $postData );$a->format = function( &$data ) {  $data['createtime'] = strtotime( $data['createtime'] );};$a->run();var_dump( $a->getData() );

の実行結果 はここでは 2 次元配列 $ の createtime の日付形式を省略しています。 postData はタイムスタンプに変換されます。 bigFly: このようにして、クラス A でよく使用されるいくつかのメソッドを定義する限り、いくつかのよく使用されるルールなどを繰り返し定義することなく関数を作成できます。 🎜> は呼び出し可能な転送ドアです。より厳密な場合は、関数

    であることを確認する is_array 判定を追加できます。これにより、format や validate などの一般的に使用されるいくつかのメソッドを直接埋め込むことができます。 class A
  • 同時に、フォーム データをフォーマットする必要がある各スクリプトが参照するクラスの数は非常に少なくなります。たとえば、文字列フォーマットが電子メール アドレスであるかどうかを検出したい場合は、メソッドを呼び出す必要がある場合があります。各フォーム処理場所の文字列クラス。クラス A では、A が 1 つだけ必要で、そのような参照をすべて A に書き込むだけです。
  • フォーム データを処理するこれらの関数は本質的に 1 回限りです (これらの形式メソッドは引き続き適用できます)。 ? 他のフォームデータ処理?) なので、匿名関数を使用する方がその意味に沿っています
  • それは派手だと思いませんか?
  • その他

この処理により、以下のようなコードも書けるかもしれませんが、ここでは実装は書きません

  • という形式で簡単に完成させることができます。匿名関数はコールバック関数とも呼ばれます。関数 ```
    $a->validate = function( &$data ) {$data['email'] = array( 'email', 'unique' );$data['name'] = array( 'required', 'unique' );$data['createtime'] = array( 'datetime', function($time) {    if ( strtotime( $time ) >= time() ) {      return false;    } else {      return true;    }  } );};
    ポータル
  • 前の PHP-Array 私の小説霊隠万年
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。