PHP中的前向声明(函数)示例?

时间:2012-08-30 04:43:36

标签: php

我发布这个是因为它在Google或php.net上并不明显

==> 请使用 PHP 语言演示正确声明函数的语法的几个示例。

例如(在C ++中):

int foo(); // forward declaration

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

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

这在PHP中看起来如何?多个参数怎么样?默认参数怎么样?最佳做法是什么?为什么?

6 个答案:

答案 0 :(得分:8)

你不需要在PHP中进行前向声明,而是需要在当前脚本中声明函数(即使它是在调用之后),或者在任何包含/必需的脚本中,给出include / require在调用函数之前执行语句。

没有前瞻声明。

如果在当前脚本上,即使在最后,在调用之后:它'ok

如果当前脚本在脚本INCLUDEd / REQUIREd上,则应在调用函数之前执行INCLUDE / REQUIRE语句。

如果它在一个脚本上包含/请求当前脚本:它没问题(即使在INCLUDE / REQUIRE语句之后声明)

答案 1 :(得分:3)

不仅仅是......

$x = foo();

function foo() {
    return 5;
}

echo $x; //echos "5"

答案 2 :(得分:3)

我会说所要求的例子不是最好的证明前向声明的必要性。比如说,我们需要以下内容:

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

上面的代码在PHP中完美运行,尽管 foo 中的“未定义”功能 bar 。似乎PHP在调用时检查函数定义。

所以答案是:

  1. PHP没有前向声明。
  2. 该功能不必     在它出现在文本之前定义,但必须定义它     在它被召唤之前。

答案 3 :(得分:2)

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每次编译它时都会解析你的脚本。它在开始执行文件之前找到你的函数,因此它知道它们在那里。事实上,我不记得在调用之前你必须要多远才能定义函数。我已经做了9年的PHP,它从来不需要: - )

答案 4 :(得分:0)

如果你希望函数在PHP中返回某个类型的值,你可以使用类似的东西。

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

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

$x = (int) foo($param);

答案 5 :(得分:0)

参考你可以这样做的默认参数

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

foo();
foo("not default","not default");
foo(NULL,"not default");