2011-02-03 20 views
9

Это плохая практика?PHP - определяющие классы внутри функции

нравится:

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

?

+0

Возможный дубликат [# 2619573] (http://stackoverflow.com/questions/2619573/how-to-use-include-within-a-function) – drudge

+0

Я думаю, что это дубликат [этого] (http: //stackoverflow.com/questions/1669707/should-require-once-some-file-php-appear-anywhere-but-the-top-of-the-file) на самом деле – greatwolf

ответ

7

Да Плохое применение; нет нет.

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

Если вы используете __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.

3

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

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

+2

«это не то, что ожидал еще один разработчик», если только конечно, другой разработчик делает то же самое ... – zzzzBov

+0

@zzzzBov: Конечно, я имею в виду «нормального» разработчика. Нестандартная практика - это плохая практика, ИМО. –

+1

Я согласен с тем, что вы говорите на некоторых уровнях, но важно различать *, который * стандарт, о котором вы говорите. Существует не * официальный * стандарт, есть только то, как другие программисты написали код в прошлом. Самое близкое к стандартному * стандарту - это спецификация кодирования и синтаксис, который является либеральным по причине. – zzzzBov

1

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

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

0

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

1

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

+0

Как указано в другом месте, это в основном то, как работает автозагрузчик. – Mchl

+0

Да, но автозагрузчик не имеет одинаковых проблем с читабельностью/ремонтопригодностью. – keithjgrant

Смежные вопросы