1

これはばかげた質問のように聞こえるかもしれませんが、関数に変数を割り当てるということは、その関数が 1 回しか呼び出されず、その関数を追加で呼び出すことなく無制限に再利用できることを意味するのでしょうか、それとも関数を複数回呼び出すのでしょうか?

これは:

$variable = function_name();
echo $variable;
echo $variable;

これと同じ:

echo function_name();
echo function_name();

どちらの状況でも最終的に同じ情報が表示されることは理解していますが、そのデータのビットが一度フェッチされて何度も再利用されるのか、それともエコーごとにフェッチされるのかに興味があります。

では、変数を関数に割り当てるということfunction_name();は、作業が 1 回だけ行われ、変数は後で使用するためにデータをリサイクルするだけなのか、それともfunction_name();実際に作業を 2 回行うのでしょうか?

変数を割り当てるか、使用する必要があるたびに関数を直接呼び出す方が良い方法ですか?

4

4 に答える 4

2

たとえば、このような関数がある場合、関数は常にいくつかの値を返す必要があります。

function foo() {
    return 'hello world';
}

それを呼び出して変数に割り当てると、

/*
* in the below example the function will be called once 
* and the function's return value will be assigned to $a variable
* now $a will contain value 'hello world';
*/
$a = foo();

変数を出力しようとすると、変数$aに含まれる値が出力されるだけで、関数が再度呼び出されることはありません。これは、 $a「helloworld」が含まれているためです。

$a変数を複数回エコーする。

echo $a;
echo $a;
echo $a;

値をhello world3回出力するだけで、関数を3回呼び出すことはありません。

ただし、たとえば関数を複数回呼び出す場合。

$a = foo();
$a = foo();

今あなたの質問に来ています。

これにより、関数が複数回呼び出されます。値は、関数呼び出しによって返された前の値から上書きされます。したがって、変数を関数に割り当てることはfunction_name()を意味します。作業は1回だけで、変数は後で使用するためにデータをリサイクルするか、function_name()を実行します。実際に2回作業しますか?

私はこれを完全に詳細に説明したと思います。

Is it better practice to assign variables or just directly call the function each time it needs to be used?

コンテキストや使用する関数によって異なりますが、最終的には、たとえば、関数から常にいくつかの値を返してみてください。

a)関数がいくつかの値をフェッチしてフォーマットすることを目的としている場合は、配列、文​​字列、またはその他のデータ型として返す必要があります。

b)関数がフェッチではなく何らかの実行を行うことを意図している場合はreturn true|false、操作が成功したかどうかを示すようなブール値を返すことができます。

于 2012-07-24T19:52:13.060 に答える
2

1回だけ実行されます

<?php
function test(){
    return time();
}

$a = test();

echo $a . "\n";
sleep(1);
echo $a . "\n";

larikov@mb:~# php -f t.php 
1343159819
1343159819
于 2012-07-24T19:58:18.823 に答える
1

関数は、呼び出した回数だけ実行されます。2 番目の例では、関数が 2 回実行されますが、関数が両方のケースでまったく同じコードを返す場合、非効率的です。キャッシュはいくらか役に立ちますが、キャッシュからスローされる可能性があり、キャッシュがいっぱいになる可能性があります。最初の例のように変数に入れて、必要に応じて出力するのが最善です。

于 2012-07-24T19:51:40.517 に答える
1

プログラミング言語は通常、非常に単純です。PHP のような高水準言語であっても、コンピュータ/プロセッサに何をすべきかを命令します。

したがって、コマンドを実行echo "day";すると、文字列dayが出力 されます - 書かれているように。そして言ったように:かなり簡単です。

では、関数を呼び出すのはどうですか:

printf("%s", 'day');

文字列の日も出力します。また、文字列'day'を の 2 番目のパラメータとしてフォーマットしますprintf。したがって、関数が呼び出されます。

変数を割り当てるか、使用する必要があるたびに関数を直接呼び出す方が良い方法ですか?

それはかなり哲学的な問題です。技術的には、どちらも同じにすることができます。両方が同じである場合は、関数を 1 回呼び出し、戻り値を valvue に割り当て、後で使用できるように保存する方が賢明です。

変数に格納することの利点は、通常、とにかくこれを行う必要があることです (変数に対して明示的にではなく、メモリに対して)。それを取る。あなたのソフトウェアを速くします - たとえあなたが考えたとしても: ええと、少なくともこれは追加の変数であり、これは物事を遅くします. 真実: 変数は一般的に開発をスピードアップします。さらに、PHP にはコピー オン ライトがあります。つまり、データのコピーは実際にはほとんど行われません。

于 2012-07-25T02:52:22.807 に答える