4

当我开始学习 OOP 编程时,我读到一切都是对象。我大部分时间都是用 PHP 开发的。数组在这里扮演着重要的角色。在大多数情况下,在像 C# 这样的语言中,您确实必须使用和传递对象而不是数组。

例如:

Class Product
{
    private $data = array();

    public function __construct()
    {
        $this->data['setting_1'] = 'a';
        $this->data['setting_2'] = 'b';
        $this->data['setting_3'] = 'c';
        $this->data['setting_4'] = 'd';
        $this->data['setting_5'] = 'e';

    }
}

使用 PHP 时为所有内容创建类有什么意义吗?例如:

Class Product
{
    private $setting_1, $setting_2,  $setting_3,  $setting_4,  $setting_5; 
}

然后在另一个类(例如模型)中实例化类产品并返回对象而不是数组(例如到控制器)?

4

4 回答 4

4

答案很简单。

一切都是对象

只是一个理想。

在大多数现实世界的 OOP 语言中,也有简单的数据类型。即使在 Java 或 CSharp 中。在 PHP 中,甚至还有一个数组作为一种复杂的非对象数据类型。你不用担心使用它,当然在 OOP 上下文中也是如此。

请注意,拥有强大的数组数据类型是一种优势而不是劣势。在我看来,PHP 最缺乏的 OOP 特性是多态性,顺便说一句。


然而,PHP5在所谓的(SPL) 扩展中引入了一套迭代器数据结构Standard PHP Library,它是 PHP 核心发行版的一部分。您可以查看它们,但在大多数情况下,数组数据类型应该可以正常工作(并且性能良好)。

于 2013-06-20T18:06:45.713 回答
2

在“一切都是对象”的心态中,请记住,这适用于从一开始就基于 OO 的语言。PHP 不是这些语言之一,对象是事后添加的。所以你在 PHP 中的简单变量类型不是对象,它们是更小更简单的内存块。

这很麻烦,但是如果您不需要在 PHP 中使用对象,那就不要,简单的数组比包含数组的对象更轻。更轻的意思是他们使用更少的内存,反过来,运行速度略快。

关于编写 PHP,您可以获得的最佳建议是 KISS(保持简单愚蠢)。

于 2013-06-20T18:18:50.913 回答
2

回答“在使用 PHP 时为所有内容创建类有什么意义吗?” 作为“当您使用 PHP 时,在类中为所有内容创建属性有什么意义吗?”

是的,当只使用数组时,很难在别人的代码上进行开发。特别是如果没有常量使得很可能输入错误的东西来创建一个很难找到的错误。

另外,并不是说您不是在谈论“为所有事物创建对象”,而是在谈论属性与值列表(数组),这是我的回答所依据的。

于 2013-06-20T18:07:53.390 回答
2

不,不是所有的东西都需要在课堂上。这不是 Java。:P

PHP 是一种多范式语言。这意味着使用一些面向对象而不用全力以赴是完全合法的。OOP 专家可能会告诉你你是一个多么可怕的人,但 OOP 只有在降低整体复杂性时才值得。为了这样做,将每个值包装在一个类中,增加了复杂性而没有真正的收益。

类基本上是具有自己独特行为的数据的模板。如果您的数据不需要与之相关的行为(例如,特殊的构造、验证、解释或持久性),那么将其包装在对象中通常是矫枉过正的。

于 2013-06-20T18:10:09.243 回答