PHP - определение классов внутри функции - PullRequest
9 голосов
/ 03 февраля 2011

Это плохая практика?

вроде:

function boo(){
  require_once("class.moo.php");
}
...

?

Ответы [ 5 ]

8 голосов
/ 03 февраля 2011

Да это плохая практика; нет это не так.

Скорее всего, вы получите оба ответа, и вот почему:

Если вы используете __autoload (или эквивалент), звоните:

function someFunc()
{
  $n = new UndefinedClassName();
}

эквивалентно:

function someFunc()
{
  include('path/to/UndefinedClassName.php');
  //may be require_once, include_once, include, or require
  //depending on how autoload is written
  $n = new UndefinedClassName();
}

Но вы получите лучшую производительность из своего кода, если не будете использовать __autoload. И чтобы поддерживать ваш код, лучше поместить все ваши includes в верхнюю часть скрипта, как вы бы сделали для import операторов на других языках.

include('path/to/UndefinedClassName.php');
...code...
function someFunc()
{
  $n = new UndefinedClassName();
}

Я бы предложил последовательность. Если вы последовательно вызываете include в функциях, у вас не должно быть слишком много проблем, но я бы выбрал импорт в начале файлов или как autoloads.

4 голосов
/ 03 февраля 2011

Я бы избежал этого.

Это не то, что ожидал бы другой разработчик, и, как таковое, снизило бы удобство сопровождения вашего кода.

1 голос
/ 03 февраля 2011

Как правило, это плохая практика, и ее следует избегать.Возможно, вам следует рассмотреть возможность использования автозагрузчика .

1 голос
/ 03 февраля 2011

Так работают загрузчики классов.Это не обязательно плохая практика.

Зависит от того, что делает функция и почему вы это делаете.Использование автозагрузки может быть более целесообразным.

0 голосов
/ 03 февраля 2011

Если у вас есть причины для этого, я не вижу в этом ничего плохого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...