PHP – определение классов внутри функции

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

как:

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

?

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

Вероятно, вы получите оба ответа, и вот почему:

Если вы используете __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(); } в 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 . И для поддержания вашего кода лучше всего включить все свои приложения в начало скрипта, как для операторов import на других языках.

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

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

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

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

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

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

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

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