Организация функций PHP - PullRequest
       38

Организация функций PHP

0 голосов
/ 15 августа 2010

Я пишу довольно простое php-приложение и создал довольно большой беспорядок функций для выполнения различных задач, например, display_user_nav (), display_user_list () и т. д. Я хочу, чтобы организовать их логически. Что мне действительно нужно, так это что-то вроде модуля ruby, но я не смог найти эквивалент php. Я также чувствую, что с точки зрения программирования они не принадлежат классам, поскольку у меня уже есть объект User, содержащий информацию для одного пользователя, и я не хочу создавать и хранить новый объект всякий раз, когда я хочу их использовать .

Что я сейчас делаю:

display_user_table()
display_user_edit_form()

Что я хочу сделать (вроде Ruby):

User_Functions::Display::Table()
User_Functions::Display::Edit_Form()

Любые предложения приветствуются.

Ответы [ 4 ]

2 голосов
/ 15 августа 2010

Если вы используете PHP 5.3+, у вас есть пространства имен .

Таким образом, вы можете назвать свои функции (разделитель пространства имен - \):

User_Functions\Display\Table
User_Functions\Display\Edit_Form

Однако, похоже, что использование класса для этого не было бы плохой идеей. Если вы чувствуете, что функции отображения на самом деле не принадлежат User (так же, как многие думают, что методы сериализации не имеют смысла в целевых объектах), вы можете создать такой класс:

class DisplayUser {
    private $user;
    function __construct(User $u) { $this->user = $u; }
    function table() { /* ... */ } 
    function displayForm() { /* ... */ } 
}
0 голосов
/ 15 августа 2010

Не должно быть таких функций вообще, кроме шаблона, который заботится обо всем выводе HTML.

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

0 голосов
/ 15 августа 2010

Ну, вы можете разбить их на вспомогательные классы, например:

$helper = new UserHelper();
$helper->renderTable($user);
$helper->renderForm($user, 'edit');

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

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

0 голосов
/ 15 августа 2010

как насчет абстрактных классов !? или синглтоны? это хороший способ организовать ваш код

...