【问题标题】:Is it ok to have an object without attributes?没有属性的对象可以吗?
【发布时间】:2013-12-17 07:34:20
【问题描述】:

我在 PHP 中为我的期末作业做这个软件,我必须使用 OOP。我有这个类“用户”,它没有任何属性,只有方法(用户可以做的事情:注册、发布和后台操作,比如加密它的密码)。我想知道这是否可行,代码有效,但我想确保我在 PHP 中使用 OOP 很好。 我的班级是这样的:

class user{
    function cryptPass($input){code}
    function regist_user($name,$email,$gender,$dob,$password){code}
    --more methods--
  }

我应该继续这样做还是必须为用户设置属性?

【问题讨论】:

  • 这通常表示您不需要对象来执行此操作,并且可能会使您的代码过于复杂
  • 我的目标是将我的用户可以做的所有事情放在一个地方,这样我就在用户需要执行操作时调用它。这样我就不会在每个页面上都有很多 php 代码,它们都在一个地方并且组织良好。我认为这会在调试时节省一些时间。
  • 你不应该需要类来组织不相关的代码片段。良好的命名空间等应该为您做到这一点。
  • 如果你不需要任何属性,你可以使用没有任何属性的类。
  • 我还没有使用命名空间。我认为代码是相关的,不是吗?

标签: php oop object methods attributes


【解决方案1】:

如果它没有任何属性,它就不是一个真正的类。您使用一个类只是将一堆函数组合在一起。类用作表示对象的数据结构,例如具有名称、密码等的真实用户。在这里,您只有实用程序函数,它在内存中不存储任何内容。

真正的user 类应该是like in this thread

您需要使用namespaces 来组织您的应用程序。

【讨论】:

  • 是的,这正是我需要做的。我将使用这些:$name,$email,$gender,$dob,$password 并将它们定义为属性并在用户使用 regist_user() 函数注册时更改它们的值。对吗?
  • 你不需要让项目完全OOP,它更重,不实用。
  • 如果需要,那就这样做吧,但这不是最好的解决方案。它在语法上是正确的,但这不是 OOP 的哲学。
  • 我希望在我拥有的其他对象上更好地使用它。我只剩下 2 周的时间了,所以我不想谈太多细节,但毕竟我还是会使用这个软件,所以我一定会检查代码。
【解决方案2】:

首先你决定它是什么类型的对象。 (有状态或无状态

状态完整对象应该具有表示状态的属性。但是无状态对象只能有线程安全的子程序,这些子程序根据给定的参数执行一些操作。

【讨论】: