0

2 つの検証関数をコーディングしました。1 つは以下のようなものです (一度にすべてのフィールドを取得します)。

function check_fields(&$arr,&$msg,$types,$lens,$captions,$requireds) {}

他の機能は以下のようなものです:

function is_valid($field=NULL,$type=0 ,$length=0,$required=true) {}

最初の関数には数行のコード行があり、コード行が大幅に削減されます (約 30 ~ 35 行またはそれ以上)。一方、参照のない 2 番目の関数ではコード行が増加します (約 30 ~ 35 行またはそれ以上)。

検証するすべてのフィールドに対して 2 番目の関数を呼び出す必要がありますが、最初の関数 ( check_fields) はその逆です。私はずっと前の記事で、参照パラメーターを持つ関数はパフォーマンスの観点から悪いと読んだことがあります。

これで、どの関数を使用すればよいかわかりません。パフォーマンスの観点から、どちらが優れていますか?

4

3 に答える 3

1

使いやすく、保守しやすいソリューションを使用してください。あなたはマイクロ最適化について話しているが、それはほとんど役に立たない。


あなたの場合、それはより単純な解決策であり、より少ないコードを必要とするので、参照を使用してください。

于 2012-04-11T13:33:40.063 に答える
1

まあ、私はいくつかのウェブ検索の後、自分で答えを得たと思います:

PHP 参照を使用しない

于 2012-04-12T05:16:36.750 に答える
0

あなたが電話したとき、あなたはこれを覚えています:

   <?php 
    $a = 1 ;
    echo "As initial, the real 'a' is..".$a."<br/>";
    $b = &$a ; // it's meaning $b has the same value as $a, $b = $a AND SO $a = $b (must be)
    $b += 5;
    echo "b is equal to: ".$b." and a equal to: ".$a."<br/>";
    echo " Now we back as initial, when a=1... (see the source code) <br/>";
    $a = 1 ;
    echo "After we back : b is equal to: ".$b." and a equal to: ".$a."<br/>";
    echo "Wait, why b must follow a? ... <br/> ..what about if we change b alone? (see the source code)<br/>";
    $b = 23; 
    echo "After we change b alone, b equal to: ".$b." and a equal to: ".$a."<br/>";
    echo " WHAT ?? a ALSO CHANGED ?? a and b STICK TOGETHER?!! </br>" ;
    echo "to 'clear this, we use 'unset' function on a (see the source code)<br/> ";
    unset($a);
    $b = 66;
    $a = 1;
    echo "Now, after unset,b is equal to: ".$b." and a equal to: ".$a."<br/>"; 
    ?>

出力は次のようになります。

As initial, the real 'a' is..1
After the Reference operator...(see the source code)
b is equal to: 11 and a equal to: 11
Now we back as initial... (see the source code) 
After we back : b is equal to: 1 and a equal to: 1
Wait, why b must follow a? ... 
..what about if we change b alone? (see the source code)
After we change b alone, b equal to: 23 and a equal to: 23
WHAT ?? a ALSO CHANGED ?? a and b STICK TOGETHER?!! 
to 'clear this, we use 'unset' function on a (see the source code)
Now, after unset,b is equal to: 66 and a equal to: 1

レビュー:

なぜ$a変わった?これは、&(アンパサンド演算子)が&参照変数として作成されたため、「一時メモリ」に格納されたためです。あなたが初期化したとき、私$b= &$aのコメント$b = $a 参照してください. 彼らは連鎖しています!それが参照演算子の単純な意味です。$a = $b$b$a

最初は戸惑うかもしれませんが、これに慣れると、この演算子を処理して、次のような「切り替え」関数を作成できます。

<?php

function bulbswitch(&$switch)
{
    $switch = !$switch;    

}

function lightbulb($a)
{
    if ($a == true) { echo 'a is On <br/>';}
    else { echo 'a is Off <br/>';}
}

$a = true ;
echo 'At the begining, a is On, then.... <br/>';

bulbswitch($a);
lightbulb($a);
bulbswitch($a);
lightbulb($a);
bulbswitch($a);
lightbulb($a);
bulbswitch($a);
lightbulb($a);
bulbswitch($a);
lightbulb($a);
bulbswitch($a);
lightbulb($a);
?>

出力は次のようになります。

At the begining, a is On, then.... 
a is Off 
a is On 
a is Off 
a is On 
a is Off 
a is On
于 2016-03-21T17:10:58.000 に答える