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 的脚本上,则应该在调用函数之前执行 INCLUDE/REQUIRE 语句。

如果它在包含/要求当前脚本的脚本上:没关系(即使在 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();

我们没有/不需要前向声明函数的原因之一是 php 在每次编译之前都会解析您的脚本。它会在开始执行文件之前找到您的函数,因此它知道它们在那里。事实上,我不记得你必须走多远才能在调用它之前定义函数。我做 PHP 已经 9 年了,从来不需要它 :-)

于 2012-08-30T04:52:37.467 回答
-1

如果你想让一个函数在 PHP 中返回某个类型的值,你可以使用这样的东西。

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

或者,当您访问该功能时:

$x = (int) foo($param);
于 2012-08-30T04:52:58.753 回答
-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 回答