2009-03-02 3 views
4

Хороший дизайн требует только записи каждой функции один раз. В PHP я делаю это с помощью include-файлов (например, Utils.php и Authenticate.php) с помощью команды PHP include_once. Однако я не смог найти какие-либо стандарты или лучшие практики для файлов с PHP-файлами. Что бы вы предложили в StackOverflow?Советы по дизайну для функции PHP Включить файлы

Я ищу:

  • Именование Стандарты
  • Код Стандарты
  • Шаблоны
  • Предложения для определения типов возврата общих функций (сейчас я просто используя ассоциативные массивы) ,

ответ

7

Одна конвенция я хотел бы использовать, чтобы поместить каждый класс в отдельный файл с именем ClassName.class.php, а затем настроить в autoloader включить файлы классов. Или иногда я помещаю их все в подкаталог classes/и просто называю их ClassName.php. В зависимости от того, сколько я ожидаю от класса и не-класса.

Если вы организуете свои служебные функции в классах и вместо них статируете вместо них, вы можете уйти с записью всего лишь require_once() в файлы верхнего уровня. Этот подход может быть или не быть подходящим для вашего кода или стиля кодирования.

Что касается типов возврата, я стараюсь следовать соглашениям, используемым во встроенных функциях. Верните тип, соответствующий запросу, или верните false при ошибке. Просто убедитесь, что вы используете === operator при проверке false в результатах.

Тот факт, что вы обеспокоены соглашениями, говорит о том, что вы уже на правильном пути. Если вы знакомы с любыми другими языками ООП, такими как Java, C++, C# и т. Д., То вы обнаружите, что вы можете следовать многим тем же соглашениям благодаря OOP goodness in PHP5.

2

Некоторые из таких стандартов уже написаны. Большинство крупных проектов будут следовать и самим стандартом.

Здесь один написан Zend и является стандартом, используемым в рамках Zend. http://framework.zend.com/manual/en/coding-standard.html

Кроме того, PEAR всегда были некоторые довольно строгие стандарты кодирования: http://pear.php.net/manual/en/standards.php

Мой предпочтительный ответ, однако, что для вашего собственного проекта вы должны использовать то, что вы чувствуете себя комфортно, и быть внутренне непротиворечивым. Для других проектов следуйте их правилам. Согласованность позволяет получить большую удобочитаемость кода. Мои собственные стандарты - это не то же самое, что и PEAR. Я не отступаю от четырех пробелов (я использую вкладки), и я никогда не использую имена верблюдов как имена функций, но, тем не менее, если я что-то редактирую из другого проекта, я пойду с тем, что делает этот проект.

3

Какое бы ни было соглашение об именах, в котором вы в конечном итоге используете (я предпочитаю принимать сигналы от Java или C#, где это возможно), убедитесь, что вы используете файлы include для функций, которые они фактически не выполняют какой-либо код после включения и никогда не включают тот же файл дважды. (Использование include-once или require-once)

0

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

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

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

Выше было прекрасно, даже с большой базой кода с тоннами классов, хэш не такой большой, и производительность никогда не вызывала беспокойства. И что еще более важно, мы не состоим в браке с каким-то сумасшедшим соглашением об именах пространства имен псевдо-имен, см. Ниже.

Другой вариант - это разграниченное имя, псевдоопределение пространства имен. Это менее привлекательно, так как пространства имен будут иметь значение 5.3, и я вижу, что это грубо, поскольку переименование их по кодовой базе будет менее забавным. Независимо от того, как это работает, допустим корень для всего вашего кода. Затем все классы называются на основе обхода каталога, необходимого для его получения, с разделителем символом, такого как «_», а затем самого имени класса, однако файл будет называться после класса. Таким образом, местоположение класса кодируется в имени, и автозагрузчик может использовать это. Проблема с этим методом, помимо real_long_crazy_class_names_MyClass, заключается в том, что на каждом вызове есть справедливая бит обработки, но это может быть преждевременная оптимизация, и снова появляются пространства имен.

например.

/code root 
ClassA ClassA.php 
    /subfolder 
    subFolder_ClassB ClassB.php