Дизайн - Консолидация моих файлов PHP? - PullRequest
2 голосов
/ 20 мая 2011

Насколько я понимаю, "name" .class.php является стандартным соглашением для создания классов в PHP, и поэтому у меня есть отдельный файл для каждого класса.То, что я хотел бы сделать, это консолидировать мою небольшую иерархию классов php в один файл ... скажем consolidated.class.php.

Это упростит загрузку / загрузку на сервер +, если мне нужно выполнить простой текстовый поиск, мне не нужно искать больше одного файла.Кроме того, я могу удалить include / require, так как я, по сути, вставляю их вручную.

Вопрос в том, могу ли я объединиться, не взяв на себя производительность?

Много позже я использую отдельные файлы и автозагрузчик.Это должно быть более эффективным, но, конечно, насколько это зависит от размера файлов.

Ответы [ 4 ]

3 голосов
/ 20 мая 2011

Причина, по которой люди используют один класс для соглашения о файлах, - для автозагрузчиков классов.Это позволяет вашему сценарию автоматически загружать только тот код, который фактически используется вашим сценарием в данном конкретном случае.Если вы загружаете ВСЕ свои классы каждый раз при загрузке страницы, это довольно неэффективный способ.

Для получения дополнительной информации об автозагрузчиках классов:

http://php.net/manual/en/language.oop5.autoload.php

http://php.net/manual/en/function.spl-autoload-register.php

3 голосов
/ 20 мая 2011

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

Соглашение об использовании класса для файла происходит из мира Java. В течение многих лет PHP пытался подражать Java, однако некоторые практики абсурдны. Например, у вас не может быть функций, только классы, даже если они не более чем набор статических методов.

Вот пример веб-фреймворка, называемого Konstrukt , который использует несколько единиц (классов / функций / констант) на файл и, кажется, работает хорошо.

Как сказал @Nabeel, у вас может возникнуть проблема с поиском кода, если все находится внутри одного большого файла. Судите по проекту, который вы разрабатываете.

Что касается производительности, вам придется проводить тесты, поскольку опять же это зависит от проекта, но require / include влечет за собой некоторое снижение производительности из-за файлового ввода-вывода. Так что может быть лучше, чтобы у вас был один файл, загруженный за запрос. Фактический синтаксический анализ может быть быстрее, чем системные вызовы, которые ищут требуемый файл.

0 голосов
/ 20 мая 2011

Я не хочу говорить то же самое, что и другие (что на самом деле правильно ^^), чтобы принести вам новые идеи.

Я бы создал несколько функций, которые бы включали / требовали файлы моего класса.

Пример:

у вас есть 2 php-файла:

1: login.php

2: register.php

<?php
   // login.php
   include '../system/functions/myFunctions.php';  
   loadMyClasses(1);
?>

<?php
  // register.php
  include '../system/functions/myFunctions.php';
  loadMyClasses(2); 
?>

<?php
  //myFunctions.php

  DEFINE("CLASS_PATH", "../system/class/");      

  function loadMyClasses($type_id)
  {  
     //Example: Load in everytime. These files are always required.
     require_once CLASS_PATH.'class.database.php';
     require_once CLASS_PATH.'class.sql.php';

     if($type_id == 1)
     {
           require(CLASS_PATH.'class.security.php');
           require(CLASS_PATH.'class.cryptor.php');   
           require(CLASS_PATH.'class.login.php');   
     }

     if($type_id == 2)
     {
           require(CLASS_PATH.'class.security.php'); 
           require(CLASS_PATH.'class.register.php');  
     }
  }
?>

И таким образом вы можете просто изменить путь к классу или файлам интерфейса.Вы должны вносить изменения только в одном файле.

Надеюсь, я смог немного помочь!

0 голосов
/ 20 мая 2011

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

...