1

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

4 回答 4

2

如果您使用的是 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() { /* ... */ } 
}
于 2010-08-15T18:16:47.637 回答
0

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

于 2010-08-15T18:18:29.057 回答
0

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

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

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

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

于 2010-08-15T18:21:53.770 回答
0

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

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

于 2010-08-15T18:22:33.310 回答