ホームページ > バックエンド開発 > PHPチュートリアル > PHPにおける変数の選択宣言について

PHPにおける変数の選択宣言について

WBOY
リリース: 2016-06-23 13:02:38
オリジナル
978 人が閲覧しました

そんな事があるかどうかは分かりませんが、私のプロセスを見てみましょう
初めに:

$field = ['aa', 'bb', .......];#十几二十之多$data = array();foreach($field as $v){            switch($v){            case "aa": $data[$v] = get_aa();break;            .......            }} 
ログイン後にコピー

後で言いました
$field の値が zz 1 つだけの場合
このようにして、プログラムは比較し、最初のケースから 1 つずつ判断してください、ダメです
それから私は
 $field = ['aa', 'bb', .......];#十几二十之多 $aa = function(){return get_aa();}; #将运算代码放入匿名函数 $data = array(); foreach($field as $v){                $data[$v] = $$v(); }
ログイン後にコピー

#これで多くの判断が省けますが、問題はここにあります
#この場合、$aa や $bb などの多くの変数が必要ですif $field=[' zz']; を考えたのですが、 $zz 変数だけを選択的にロードすることは可能でしょうか
あるいは、最も原始的な不合理な判断を直接解決することは可能でしょうか? ? ありがとうございます


ディスカッションへの返信 (解決策)

配列 $field のすべてのメンバーに対して get_aa() を実行すると、まだ get_aa()、get_bb() が存在します。 get_cc()....

後者の場合は ${'get_' . $v}() で十分です

より一般的な

$f = array(  'a' => function() { return 'A'; },  'b' => function() { return 'B'; },  'c' => function() { return 'C'; },  'd' => function() { return 'D'; },);$d = array('c', 'b');foreach(array_intersect_key($f, array_flip($d)) as $k=>$v) {  $r[$k] = $v();}print_r($r);
ログイン後にコピー
Array(    [b] => B    [c] => C)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

配列 $field のすべてのメンバーに対して get_aa() を実行します

get_aa(), get_bb(), get_cc().... になります

後者であれば ${'get_'. $v}() で大丈夫です

ご返信ありがとうございます

に対応するプログラムアルゴリズム各フィールドは異なり、不規則です

大丈夫
$f = array(  'a' => function() { return 'A'; },  'b' => function() { return 'B'; },  'c' => function() { return 'C'; },  'd' => function() { return 'D'; },);$d = array('c', 'b');$r = array_intersect_key($f, array_flip($d));array_walk($r, function(&$v) { $v = $v(); });print_r($r);
ログイン後にコピー
ログイン後にコピー
Array(    [b] => B    [c] => C)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

大丈夫
$f = array(  'a' => function() { return 'A'; },  'b' => function() { return 'B'; },  'c' => function() { return 'C'; },  'd' => function() { return 'D'; },);$d = array('c', 'b');$r = array_intersect_key($f, array_flip($d));array_walk($r, function(&$v) { $v = $v(); });print_r($r);
ログイン後にコピー
ログイン後にコピー
Array(    [b] => B    [c] => C)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

アドバイスありがとうございます

この配列は 6 で遊ぶことができます
実際のアプリケーションでは、配列 $f は非常に大きくなります。大きくて、それぞれの値は特別なメモリを占有しますか? それとも考えすぎですが、考える必要はありません

では、静的関数を 1 つずつ記述してもメモリを占有しないと思いますか?

本当に静的関数を動的に実行する必要がある場合は、匿名関数を作成することが最良の選択です
コンパイルのオーバーヘッドを削減できるだけでなく (10,000 個の静的関数のうち 10 個だけを使用する場合、9990 個もコンパイルする必要があります)
さらに、関数に名前を付ける必要はなく、目的に直接バインドされており、対応するチェックの必要がなくなります

それでは、静的関数を 1 つずつ記述してもメモリを占有しないと思いますか?

本当に静的関数を動的に実行する必要がある場合は、匿名関数を作成することが最良の選択です
コンパイルのオーバーヘッドを削減できるだけでなく (10,000 個の静的関数のうち 10 個だけを使用する場合、9990 個もコンパイルする必要があります)
そして関数に名前を付ける必要はなく、目的に直接バインドされているため、対応するチェックの必要がなくなります

上司に感謝します。
以上です
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート