Как бы вы структурировали или как лучше всего структурировать код на PHP?

я хочу знать, как лучше всего (быстрее и лучше) структурировать код на PHP.

Некоторые люди сохраняют мастер-класс с функциями, подклассами и переменными в уникальной глобальной переменной, например, в случае $modx CMS.

Каковы ваши методы структурирования?
И как вы подключаетесь к своей БД?
Все ли вы предпочитаете PHP-фреймворки, такие как PHPCake?
Как вы структурируете Plubic vars (конфигурация) и Private vars (временные или работающие программы? вары)?

Причина моих вопросов в том, что я не хочу начинать программировать статично, с сильной базой. В настоящее время я программирую с помощью ModX framework/CMS.

ПРИМЕЧАНИЕ. Пожалуйста, обосновывайте каждый раз, когда вы голосуете -1 за ответ!

Заранее спасибо (извините за мой плохой английский)


person cusspvz    schedule 26.06.2010    source источник
comment
Ваш вопрос кажется очень общим... В любом случае не рекомендуется хранить все в одной глобальной переменной!   -  person mexique1    schedule 26.06.2010
comment
Насколько общий? я не хочу знать структуру, которую каждый использует, чтобы использовать лучше и начать программировать таким образом. Извините за мой английский...   -  person cusspvz    schedule 26.06.2010


Ответы (4)


Быстрее и лучше вместе не идут.

Быстрее

Чистый PHP быстрее и совместимее. Ваши дистрибутивы будут меньше. Это самый простой в обслуживании? Ну, это может быть, если сделать правильно. Крупные программные проекты, такие как Drupal или Wordpress, показывают, что проекты на основе Framework не легче поддерживать, чем чистый PHP. Чистый PHP по-прежнему имеет несколько встроенных классов, но в конечном итоге они возвращаются к функциям. Автозагрузка — это хорошо, но большие базы кода по-прежнему снижают производительность.

Лучше

Проекты на основе фреймворка, как правило, лучше поддерживать и работать с ними в долгосрочной перспективе. Они медленнее из-за своей природы (автозагрузка снижает производительность, если у вас много разных путей в пути включения или плохо упорядоченный путь включения). Он также дает предустановленную структуру, чтобы другие могли быстрее понять, что происходит. Большинство проектов Zend Framework выглядят одинаково, поэтому у вас будет больше шансов найти, какая часть кода выполняется. Производительность снижается, и требуются внешние помощники, такие как кэши кода операции.

Мое мнение

Выберите вариант «Лучше»: фреймворк с автозагрузкой. Большая часть работы уже сделана за вас, так что вы будете готовы к работе быстрее с точки зрения времени производства. Прямо сейчас я предлагаю Zend Framework плюс Doctrine. Это самый быстрый? Нет, но за ним легче ухаживать.

Если вам нужна абсолютная скорость, выберите ядро ​​PHP или создайте собственную низкоуровневую структуру. ZF, Code Igniter, symfony — все они теряют производительность по сравнению с основным PHP.

person dragonmantank    schedule 26.06.2010
comment
+1 Очень хороший ответ, если никто не опубликует лучший ответ, я приму это;) На одну вещь вы не ответили ... Какую структуру вы предпочитаете? Запуск с обычными функциями или функциями класса? Например, как вы предпочитаете подключаться к БД и как вы угрожаете Plubic vars (конфигурация) и Private vars (временные или запущенные программы)? - person cusspvz; 26.06.2010

Используйте автозагрузку для загрузки классов и доступа к экземплярам через синглтоны:

class DB extends mysqli{
  private static $instance;
  private function __construct(){
    parent::__construct(DB_HOST,DB_LOGIN,DB_PASS, DB_DB);
    $this->set_charset("utf8"); 
    $this->autocommit(false);
  }

  public static function i()    {
    if (!self::$instance instanceof self){ 
      self::$instance = new self;           
    }
    return self::$instance;
  } 
}

использовать:

$res=DB::i()->query("SELECT * FROM whatever");

он создаст один экземпляр mysqli, и всякий раз, когда вы будете обращаться к DB::i(), он вернет этот экземпляр.

person codez    schedule 26.06.2010
comment
Итак, вы используете классы для управления потоком кода? - person cusspvz; 26.06.2010

Я думаю, вас заинтересует внедрение зависимостей. Также используйте автозагрузку: это убийственная функция . Для БД используйте PDO, который является собственным уровнем базы данных PHP.

person Savageman    schedule 26.06.2010
comment
я не знал PDO... Хорошо, а как вы структурируете свои вары? - person cusspvz; 26.06.2010
comment
ПРИМЕЧАНИЕ для человека, который проголосовал -1 здесь: Пожалуйста, обосновывайте каждый раз, когда вы голосуете -1 за ответ! - person cusspvz; 26.06.2010
comment
Обычно я оборачиваю переменные внутри статических классов, чтобы обеспечить своего рода пространство имен. Поскольку пространства имен PHP 5.3 являются родными, многие хостинговые компании могут по-прежнему не поддерживать их. Например, у меня есть этот класс Page (пространство имен для хранения всех переменных, связанных со страницей), который содержит заголовок, ключевые слова, описание, поведение мета-роботов и массивы, для которых должны быть включены css, js и rss/ отображается. Получилось очень полезно! - person Savageman; 26.06.2010
comment
Хм... интересно... а куда вы сохраняете содержимое пространства имен? Mysql или php файл? - person cusspvz; 26.06.2010
comment
Он загружается во время выполнения. Если вы показываете элемент новостей, вы устанавливаете заголовок страницы динамически, например, Page::$title = $news->title;. Если у вас есть специальный CSS для модуля новостей, вы добавляете его, например, Page::$css[] = 'news.css'; (предпочтительнее использовать такие методы, как Page::addCss() или Page::setTitle(), а не задавать var напрямую. Таким образом, ваш шаблон/макет использует класс Page для извлечения и отображения соответствующего заголовка/css. Наличие некоторой централизации для CSS/JS даже позволяет вам комбинировать/минимизировать их перед отправкой клиенту. ;) - person Savageman; 26.06.2010