PHP (несколько вопросов) ОО, рефакторинг, затмение - PullRequest
5 голосов
/ 09 июня 2010

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

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

Во-первых, общее кодирование

  1. Я обнаружил, что легко потерять отслеживание включенных файлов и ихпеременные.Например, если была база данных $ cursor, трудно запомнить или даже знать, что она была объявлена ​​во включаемом файле (это становится намного хуже, чем больше файлов вы включаете).Как люди справляются с этим?

  2. Как люди документируют свой код - в частности, необходимые данные GET и POST?

Во-вторых ОО развития:

Должен ли я быть полным OO в моем развитии.В настоящее время у меня есть библиотека функций, которую я могу включить и разделить каждую «задачу» в отдельный файл.Это немного неприятно, но работает.

Если я уйду, как я структурирую каталоги в PHP, java использует пакеты - как насчет php?

Как мне назвать мои файлы, я должен использовать все строчные буквы с _ для пробелов "hello_world.php"?Должен ли я называть классы с заглавными буквами, как Java "HelloWorld.php"?Существует ли другое соглашение об именах для классов и обычных файлов функций?

Третье рефакторинг

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

Есть ли плагины для улучшения рефакторинга php?Я использую официальную версию PHP Eclipse с их сайта.

спасибо

Ответы [ 4 ]

1 голос
/ 09 июня 2010

Я обнаружил, что использование PHP-фреймворка (например, Zend , Cake , CodeIgniter и т. Д.) Может форсировать структуры классов и соглашения об именах, в то время как в общем случае затрагивая автозагрузку также. Использование PHPDoc форматирования свободно помогает в завершении кода и подсказках, а также в документировании конкретных требований (например, метод параметр определения).

1 голос
/ 09 июня 2010

Во-первых, общее кодирование

1) ОО может помочь вам в этом.Поскольку вы инкапсулируете переменные и функциональные возможности, они не выходят и не связываются с пространствами имен.Предположим, я правильно понимаю, на какую проблему вы намекаете, использование ОО-подхода помогает смягчить конфликты, которые могут возникнуть, когда вы непреднамеренно изменяете условия размещения переменных.(Примечание: Облегчить. Не полностью предотвратить самостоятельно.;)) В противном случае я столкнулся с практикой, заключающейся в добавлении имен переменных с чем-то вроде «имени пакета» - что просто сдвигает проблему на один уровень вверх и тоже не очень красиво,: |

2) «Однако подходит их цели».PHPdoc - хорошее начало;поможет создать документацию по API.

Во-вторых, OO Development:

3) Как уже было сказано ранее - "это зависит".Делай это когда нужно.Вам не нужно идти полный OO для "Привет мир".Но вы можете.Взвесьте затраты и выгоды любого маршрута и сделайте правильный выбор.Хотя я лично хочу предложить, если сомневаетесь, предпочитайте ООП «неструктурированным» подходамВ основном, знайте свои инструменты и когда их использовать - тогда вы можете легко сделать этот вызов самостоятельно.:)

4) Насколько я вижу, каталоги "структурированы как пакеты".Имейте в виду, «каталоги» и «как».Сказав это, различные структуры решили эту проблему для себя;ср;другие ответы.

5) Опять же, пожалуйста.Нет определенного способа, которым вы должны это сделать или иначе.Просто придерживайтесь его, как только вы выбрали свой путь; 3 Кроме того, определенные платформы и т. Д. Имеют свои собственные соглашения об именах.Symfony, например, использует CamelCase, как Java.

Третье рефакторинг

Я должен сказать, что это настоящая боль.

да: 3 Но это окупается.

Если я изменяю имя переменной в одном месте, мне нужно просмотреть весь документ и каждый файл, который включал этофайл и измените имя их тоже.Конечно, ошибки повсюду, что приводит.Как люди справляются с этой проблемой?В Java, если вы меняете имя в одном месте, оно меняется везде.

Нет, это не так.Если вы приобрели инструмент с поддержкой, вам придется использовать инструмент рефакторинга только один раз;но если вы переименуете свойство класса в java, ни один магический бот не будет ходить по Интернету и автоматически проверяет, что все на планете используют новое имя.;)

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

Но как люди решают эту проблему?Что ж, поиск и замена, я полагаю;)

Что касается Eclipse-Plugin - динамическая природа PHP затрудняет автоматический рефакторинг кода;мы не всегда можем использовать статический тип подсказок и т. д., а гадание типов аргументов и возвращаемых данных чаще всего невозможно.Итак, насколько мне известно, «автоматический рефакторинг» не так хорошо поддерживается инструментами, как в мире Java.Хотя я уверен в выполнимых случаях, там должны быть плагины.:)

0 голосов
/ 13 июня 2010

Взгляните на nWire для PHP . Это плагин для Eclipse PDT, который обеспечивает исследование кода и визуализацию.

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

Он не поддерживает рефакторинг, но может помочь, показывая вам ссылки на определенные компоненты (например, функцию или поле).

0 голосов
/ 09 июня 2010

Для части разработки OO:

Я использую функцию автозагрузки для динамической загрузки классов.Моя структура каталогов похожа на пакеты в Java.Мои классы названы как в Java (например, HelloWorld.php).Но класс определяется с полным путем к этому классу (например, класс FW_package1_package2_HelloWorld {...}).

Если вызывается класс, метод автозагрузки заменяет все _ на / и ищет класс с извлеченнымпуть (например, FW / package1 / package2 / HelloWorld.php).

Я сильно под влиянием Java, поэтому я выбрал этот путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...