6

Googleまたはphp.netですぐに明らかにならなかったため、これを投稿しています

==> PHP言語で関数を前方宣言するための構文の例をいくつか示してください。

例 (C++ の場合):

int foo(); // forward declaration

int x = foo(); // calling the function.

int foo()  // the actual implementation
{
   return 5;
}

これは PHP ではどのように見えるでしょうか? 複数の引数でどうですか?デフォルトの引数ではどうですか?ベスト プラクティスとその理由は何ですか?

4

6 に答える 6

11

PHP で前方宣言を行う必要はありません。代わりに、現在のスクリプト (呼び出し後であっても)、または include/require ステートメントが実行されている場合は、included/required スクリプトで関数を宣言する必要があります。関数を呼び出す前に。

前方宣言はありません。

現在のスクリプトの場合、最後であっても、呼び出し後: OK

現在のスクリプトによって INCLUDEd/REQUIREd されたスクリプト上にある場合、関数の呼び出しの前に INCLUDE/REQUIRE ステートメントを実行する必要があります。

現在のスクリプトを INCLUDE/REQUIRE するスクリプト上にある場合: OK (たとえ INCLUDE/REQUIRE ステートメントの後に宣言されていても)

于 2012-08-30T04:46:30.383 に答える
4

要求された例は、前方宣言の必要性を示すのに最適ではないと思います。たとえば、代わりに次のものが必要です。

function foo($n) {
  echo 'Foo';
  if($n>0) bar($n-1);
}
function bar($n) {
  echo 'Bar';
  if($n>0) foo($n-1);
}
foo(200);

上記のコードは、foo内の「未定義」関数barにもかかわらず、PHP で完全に機能します。PHP は、呼び出されたときに関数定義をチェックしているようです。

したがって、答えは次のとおりです。

  1. PHP には前方宣言がありません。
  2. 関数は、テキストに表示される前に定義する必要はありませんが、呼び出される前に定義する必要があります。
于 2013-03-04T14:01:55.207 に答える
2

それだけではないでしょうか...

$x = foo();

function foo() {
    return 5;
}

echo $x; //echos "5"

?

于 2012-08-30T04:50:44.990 に答える
1

PHP は前方関数宣言 (または「関数プロトタイピング*」) を行いません私たちが持っている最も近いものは、オブジェクト インターフェイス抽象メソッドです。これらは「メソッド プロトタイプ」または「メソッド宣言」と呼ばれます (定義ではなく宣言であり、c を運ぶ-スタイルのセマンティック)

Interface MyWidgetInterface {
  function calculateThings(SomeClass $foo);
}

Abstract Class MyAbsClass {
  public abstract function sayHello();
}

Class MyObj Extends MyAbsClass Implements MyWidgetInterface {
  public function calculateThings(SomeClass $foo) {

  }
  public function sayHello() {
    echo "Hi!\n";
  }

}

$thing = new MyObj();
$thing->sayHello();

前方宣言された関数を持っていない/必要としない理由の 1 つは、php がスクリプトをコンパイルする前に毎回解析することです。ファイルの実行を開始する前に関数を見つけるので、それらがそこにあることがわかります。実際、関数を呼び出す前に関数を定義しなければならなかったとしても、どれだけ遡る必要があるかは思い出せません。私は9年間PHPをやっていますが、それは必要ありません:-)

于 2012-08-30T04:52:37.467 に答える
-1

デフォルトの引数を参照すると、次のように実行できます

function foo( $param1="value1" , $param2="value2" ){
    echo $param1." ".$param2;
}

foo();
foo("not default","not default");
foo(NULL,"not default");
于 2012-08-30T05:10:02.417 に答える
-1

関数が PHP で特定の型の値を返すようにしたい場合は、次のようなものを使用できます。

function foo($param) {
  // code
  return (int) $param;   // or (string), (float)
}

または、関数にアクセスする場合:

$x = (int) foo($param);
于 2012-08-30T04:52:58.753 に答える