执行相同操作的两段代码:
class Dog
{
public $name;
public $breed;
}
$hachi = new Dog;
$hachi->name = "Hachi";
$hachi->breed = "Shiba";
VS
$hachi->name = "Hachi";
$hachi->breed = "Shiba";
在此上下文中(使用类作为结构),两个代码都将实现相同的功能。除了可读性/风格之外,使用冗长版本有什么好处?是否存在性能问题或其他任何可能导致我无法进行短路的问题?
答案 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)
如果两个代码都有效,那么将它添加到一个类中,将它添加到一个类中将不会使它更快或更有效,这是一个好的做法,如果你要添加分配代码来生成它,它可以提供帮助。但表现明智,第二个会更好地运作