Это плохая практика?PHP - определяющие классы внутри функции
нравится:
function boo(){
require_once("class.moo.php");
}
...
?
Это плохая практика?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();
}
Но вы получите лучшую производительность из своего кода, если не используете __autoload
. И для поддержания вашего кода лучше разместить все свои includes
в верхней части скрипта, как и для import
операторов на других языках.
include('path/to/UndefinedClassName.php');
...code...
function someFunc()
{
$n = new UndefinedClassName();
}
Я предлагаю согласованность. Если вы последовательно вызываете include
в функции, у вас не должно быть слишком много проблем, но я бы выбрал импорт в начале файлов или как autoloads
.
Я бы избегал этого.
Это не то, что ожидал еще один разработчик, и, таким образом, уменьшит ремонтопригодность вашего кода.
«это не то, что ожидал еще один разработчик», если только конечно, другой разработчик делает то же самое ... – zzzzBov
@zzzzBov: Конечно, я имею в виду «нормального» разработчика. Нестандартная практика - это плохая практика, ИМО. –
Я согласен с тем, что вы говорите на некоторых уровнях, но важно различать *, который * стандарт, о котором вы говорите. Существует не * официальный * стандарт, есть только то, как другие программисты написали код в прошлом. Самое близкое к стандартному * стандарту - это спецификация кодирования и синтаксис, который является либеральным по причине. – zzzzBov
Как работают погрузчики классов. Это не обязательно плохая практика.
Зависит от того, что делает функция и почему вы это делаете. Использование autoloading может быть более уместным.
Если у вас есть причины для этого, я не вижу в этом ничего плохого.
Это, как правило, плохая практика, и ее следует избегать. Вероятно, вам стоит подумать об использовании autoloader.
Как указано в другом месте, это в основном то, как работает автозагрузчик. – Mchl
Да, но автозагрузчик не имеет одинаковых проблем с читабельностью/ремонтопригодностью. – keithjgrant
Возможный дубликат [# 2619573] (http://stackoverflow.com/questions/2619573/how-to-use-include-within-a-function) – drudge
Я думаю, что это дубликат [этого] (http: //stackoverflow.com/questions/1669707/should-require-once-some-file-php-appear-anywhere-but-the-top-of-the-file) на самом деле – greatwolf