快捷方式会影响性能吗?

时间:2015-10-04 05:17:41

标签: php

执行相同操作的两段代码:

class Dog
{
   public $name;
   public $breed;
}
$hachi = new Dog;
$hachi->name = "Hachi";
$hachi->breed = "Shiba";

VS

$hachi->name = "Hachi";
$hachi->breed = "Shiba";

在此上下文中(使用类作为结构),两个代码都将实现相同的功能。除了可读性/风格之外,使用冗长版本有什么好处?是否存在性能问题或其他任何可能导致我无法进行短路的问题?

3 个答案:

答案 0 :(得分:3)

实际上是的,即使除了明显的可维护性问题外,还有另一个好处。对于预先声明的属性,PHP每个类只需要一个哈希表,它将属性名映射到用于每个对象的内存高效C数组中的偏移量。使用动态属性PHP需要每个对象的哈希表。

因此,只要您拥有该类型的多个对象,就可以节省内存。

多少钱?让我们假装你有一只很多的狗。

“啰嗦”版本:

class Dog
{
    public $name;
    public $breed;
}

while (@$i++ < 1000000) {
    $hachi = new Dog();
    $hachi->name = "Hachi";
    $hachi->breed = "Shiba";
    $dogs[] = $hachi;
}

echo memory_get_usage(true); //188747776

“捷径”版本:

while (@$i++ < 1000000) {
    $hachi = new stdClass();
    $hachi->name = "Hachi";
    $hachi->breed = "Shiba";
    $dogs[] = $hachi;
}

echo memory_get_usage(true); //524292096

差异为524292096 - 188747776 = 335,544,320字节。

如需更长的解释,请参阅:Why objects (usually) use less memory than arrays in PHP

答案 1 :(得分:1)

类旨在帮助组织数据,这肯定会增加开销。

如果您正在尝试编写代表您将要使用的数据的代码,那么您将不得不接受一些性能损失。

第二种方法将创建几乎无法维护的代码。

  

PHP为我们提供了一种以编程方式定义对象的非常简单的方法,   这被称为一个类。类是一个定义和的包装器   封装了对象及其所有方法和属性。   你可以把一个类看作是一个程序化的表示   对象,它是PHP给你的接口,开发人员,   与对象交互并修改对象。而且,班级可能是   如果需要无限重用,使它非常强大和代码库   友好。您不必每次都需要重新定义   使用对象 - 设置正确编码的类来完成所有工作   对你而言。

来自:http://www.htmlgoodies.com/beyond/php/object-orientated-programming-in-php-class-1-principles.html

答案 2 :(得分:-1)

如果两个代码都有效,那么将它添加到一个类中,将它添加到一个类中将不会使它更快或更有效,这是一个好的做法,如果你要添加分配代码来生成它,它可以提供帮助。但表现明智,第二个会更好地运作