Нужно ли мне определять функции, прежде чем использовать их в объектно-ориентированном PHP? - PullRequest
2 голосов
/ 16 августа 2011

Не уверен, правильно ли я сформулировал вопрос, но позвольте мне объяснить.В процедурной программе, например:

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 ]

4 голосов
/ 16 августа 2011

Порядок функций не имеет значения по нескольким причинам:

  1. Методы не выполняются во время компиляции, поэтому компилятор может "смотреть вперед" для функций, которые еще могут не существовать. (Примечание: это упрощение ...)
  2. PHP - динамический язык, в котором функции даже не должны существовать во время компиляции . Они могут быть загружены динамически во время выполнения.
  3. PHP загружает методы по имени, поэтому он будет искать метод, который соответствует имени во время выполнения.

Пример третьего случая:

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

Это вызовет метод my_method, если он существует, для объекта $object, который является экземпляром класса MyObject. (Если этот метод не существует, он выдаст исключение во время выполнения.)

3 голосов
/ 16 августа 2011

С технической точки зрения - это не имеет значения. Все, что имеет значение, - это удобочитаемость и простота модификации, поэтому вам решать, что лучше для вас работает. Возможно, вы захотите упорядочить функции в хронологическом, алфавитном или, иногда, по назначению. ИМХО, лучший способ - упорядочить их в алфавитном порядке - их проще искать в инструментах навигации по коду.

1 голос
/ 16 августа 2011

Зависит от языка.

Например, в JavaScript ваша функция getUsername () может быть определена первой, если она вызывается после определения getUserId ().

InJava в качестве другого примера, как правило, не имеет значения (за исключением статических блоков инициализации)

0 голосов
/ 16 августа 2011

Даже в процедурных функциях стиля не требуется, чтобы объявлялось по порядку. Они должны существовать только во время их вызова. Это будет прекрасно работать, потому что на самом деле ни одна функция не вызывается:

function foo() {
    bar();
}

function bar() {
}

То же самое относится и к ООП, функция должна существовать при вызове. В каком порядке они объявлены, не имеет значения.

0 голосов
/ 16 августа 2011

Вы можете вызывать их логически в любом порядке. Некоторые языки применяют порядок декларирования, который может / не может быть другим. Но в корне, если вы используете модуль / класс / кусок кода, который объявляет ряд функций или методов, вы можете вызывать их совершенно незаметно.

...