2015-10-04 87 views
1

两片的代码,做同样的事情:快捷类影响性能?

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

VS

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

在这种情况下(使用类作为一个结构),这两个代码将实现同样的事情。除了可读性/风格之外,使用冗长版本还有什么好处吗?是否存在性能问题或其他任何会阻止我将其缩短的问题?

回答

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 = 335544320个字节。


对于冗长的说明,请参见:Why objects (usually) use less memory than arrays in PHP

+0

非常迷人,正是我想知道的。谢谢! – dukevin

+1

为了扩大这个答案,除了使用较少的内存外,'长版'的执行速度是'短版'的两倍, – user2182349

-1

如果这两个代码的工作,然后去一个短,将其添加到一个类不会使任何更快或有效率,它很好的做法,可以帮助,如果你要添加的代码来充当生成它。但性能明智的第二个会更好地工作

1

课程旨在帮助组织数据,而且肯定会增加开销。

如果你试图写代码,做你代表将被处理的数据的好工作,你就必须接受一定的性能损失。

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

PHP给了我们一个非常简单的方式来定义一个对象编程, ,这被称为一个类。一个类是一个包装器,它定义并封装了对象以及它的所有方法和属性。 你可以把一个类作为一个 对象的纲领性表示,这是PHP给你的接口,开发人员, 进行交互和修改的对象。而且,如果需要的话,一个类可以是 无限次使用,使它非常强大,并且代码库 友好。每次你想要使用一个对象时,你都不必重新定义事物 - 一个正确编码的类被设置为为你做所有的工作 。

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

+0

第二个方法将难以维持,但没有处罚?或者它是一样的吗? – dukevin

+0

第二种方法没有定义类的属性 - 所以人们可以以不同的方式对类进行编码,从而破坏它。 – user2182349

+0

假设我是唯一的维护者。再加上第一种方法,你仍然可以用相同的方式定义新的属性。 – dukevin