【问题标题】:PHP Function OrganizationPHP 函数组织
【发布时间】:2011-03-30 03:38:29
【问题描述】:

我正在编写一个非常基本的 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()

欢迎提出任何建议。

【问题讨论】:

    标签: php module organization code-organization


    【解决方案1】:

    如果您使用的是 PHP 5.3+,则有 namespaces 可用。

    所以你可以命名你的函数(命名空间分隔符是\):

    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() { /* ... */ } 
    }
    

    【讨论】:

    • 谢谢。我对 php 非常业余,所以我真的不知道如何实现命名空间。这正是我一直在寻找的。我也明白,理想情况下,我应该使用更类似于 MVC 的结构来保持井井有条,但坦率地说,这个项目太小了,不值得努力。
    【解决方案2】:

    抽象类怎么样!?还是单身?这是组织代码的好方法

    【讨论】:

      【解决方案3】:

      例如,您可以将它们分解为辅助类:

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

      帮助器的架构可能更复杂,并根据您的类的操作方式实现一个流畅的接口或类似的东西。

      另一种方法可能是将装饰器附加到您的对象以执行这些功能。

      【讨论】:

        【解决方案4】:

        根本不应该有这样的功能,而是一个负责所有 HTML 输出的模板。

        问题在于您以错误的方式使用函数:创建一个函数只是为了多次重复某些操作。
        不要将函数仅用于单个操作。

        【讨论】:

          猜你喜欢
          • 2011-01-16
          • 1970-01-01
          • 2011-04-02
          • 1970-01-01
          • 1970-01-01
          • 2017-08-14
          • 2019-07-31
          • 2012-03-03
          相关资源
          最近更新 更多