在面向对象的PHP中使用它之前是否需要定义函数?

时间:2011-08-16 05:04:42

标签: php oop function programming-languages

不确定我是否正确地表达了这个问题,但让我解释一下。在程序性程序中,例如:

function getUserId()
{
   // some stuff
   return $someUserId;
}

function getUsername()
{
  $id = getUserId();
  $query = mysql_query(" SELECT * FROM users WHERE id = '$id' ");
  while ($row = mysql_fetch_assoc($query))
  {
     return $row['username'];
  }
}

在上面,getUsername函数调用了getUserId函数。由于该函数被调用,它必须高于调用它的函数,否则它将无效。

我想知道的是,在面向对象编程中,类中函数(方法)的顺序是否重要?即使在脚本中进一步定义了被调用的方法,我是否可以在另一个方法中调用方法?

5 个答案:

答案 0 :(得分:4)

功能的顺序无关紧要,原因如下:

  1. 这些方法不是在编译时执行的,因此编译器可以“向前看”可能尚不存在的函数。 (注意:这是一个过于简单的......)
  2. PHP是一种动态语言,因为函数甚至不必在编译时存在。它们可以在运行时动态加载。
  3. PHP按名称加载方法,因此它将在运行时查找与名称匹配的方法。
  4. 第三种情况的一个例子是:

    $object = new MyObject();
    $method = 'my_method';
    echo $object->${my_method}();
    

    这将调用对象my_method上的方法$object(如果存在),该对象是MyObject类的实例。 (如果该方法不存在,则会抛出运行时异常。)

答案 1 :(得分:3)

从技术角度来看 - 它根本不重要。重要的是可读性和易于修改,因此您需要决定哪种方法最适合您。您可能希望按时间顺序,按字母顺序或有时按目的订购功能。恕我直言,最好的方法是按字母顺序排序 - 这样可以更容易地在代码导航工具中搜索它们。

答案 2 :(得分:1)

取决于语言。

例如,在JavaScript中,只要在定义了getUserId()之后调用它,就可以先定义getUsername()函数。

在Java中作为另一个例子,它通常无关紧要(静态初始化块除外)

答案 3 :(得分:0)

您可以按任何顺序逻辑调用它们。有些语言强制执行可能/可能不同的声明顺序。但是从根本上说,如果你使用的模块/类/代码块声明了许多函数或方法,那么你可以完全无情地调用它们。

答案 4 :(得分:0)

即使在程序样式函数中,也不需要按顺序声明。它们只需要在被调用时存在。这将完美地运行,因为实际上都没有调用任何函数:

function foo() {
    bar();
}

function bar() {
}

对于OOP也是如此,调用它时必须存在一个函数。声明它们的顺序无关紧要。