【问题标题】:What should be an instance of a class in php?什么应该是 php 中的类的实例?
【发布时间】:2012-01-28 22:03:27
【问题描述】:

在 PHP 5.2.x、mySQL 5.x 中

我在思考什么应该和不应该是 php 中的类的实例时遇到了一些问题,因为一旦呈现页面,它们就不会持久化。

假设我有一个 cmets 列表。对我来说,每条评论都是它自己的对象是有道理的,因为我可以对它们调用操作,并且它们拥有属性。如果我用另一种语言(具有持久状态并且可以与之交互的语言)执行此操作,我会这样做。

但这似乎很浪费,因为这样做我有一个调用 new() 的循环,这可能意味着我需要访问每个实例的数据库(也很糟糕)。

但也许我错过了什么。

我对类和对象的看法似乎有所不同。什么时候应该是类实例,什么时候不是?

【问题讨论】:

    标签: php oop class instance


    【解决方案1】:

    这是一个主观问题,所以我会尝试连贯地收集我的想法:

    PHP 中的持久性具有某种不同的含义。您认为每个评论都应该是一个对象,因为 cmets 具有可以对它们执行的操作,这似乎是正确的。对象不会在页面加载期间持续存在的事实并不真正相关。在 PHP 中使用一个脚本中的对象并不少见,该对象在脚本完成时被销毁,然后在后续页面加载时重新实例化。

    面向对象的编程提供(除其他外)代码组织和代码重用。即使一个对象在脚本执行期间只真正使用过一次,如果定义它的类有助于程序组织,那么您这样做是对的。

    您通常不必担心资源浪费,直到它开始成为问题;如果您的服务器不断被征税,以至于它会降低您的用户体验或限制您的扩展,那么是时候进行优化了。

    附录:

    为您的 cmets 定义一个类的另一个原因是,当您需要扩展该类时,这样做可能会带来好处。假设您决定实现评论回复之类的功能。回复本身只是一个评论,但包含一些关于它所引用的评论的额外属性。您可以扩展 Comment 对象以添加这些属性和其他功能。

    【讨论】:

    • 那么,我需要先重新创建实例(因为在页面完成渲染时它就死了),然后才能调用它的回复方法或类似的东西吗?
    • @AdamMeyer 每次通过从数据库或其他方式中提取评论来构建组合评论时,您都会调用 new Comment() 来创建它。您可以存储 Comment 对象的数组或其他任何东西。所以是的,你需要在调用它的reply() 方法之前实例化它。 reply() 方法可以是作用于评论 ID 的静态方法,但实例化对象会更有意义。
    • @AdamMeyer 在 PHP 中,如果您再次需要它,在页面加载后重新创建对象是完全常见的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2015-12-13
    • 2021-05-11
    相关资源
    最近更新 更多