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

Я пишу довольно простое 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()

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


person Dave    schedule 15.08.2010    source источник


Ответы (4)


Если вы используете 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() { /* ... */ } 
}
person Artefacto    schedule 15.08.2010
comment
Благодарю. Я довольно любитель с php, поэтому я действительно не знал, как реализовать пространства имен. Это именно то, что я искал. Я также понимаю, что в идеале я должен использовать структуру, более похожую на MVC, чтобы все было организовано, но, честно говоря, проект достаточно мал, чтобы не стоит усилий. - person Dave; 15.08.2010

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

person pleasedontbelong    schedule 15.08.2010

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

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

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

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

person prodigitalson    schedule 15.08.2010

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

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

person Your Common Sense    schedule 15.08.2010