PHP可以使用多少个类?

时间:2011-07-25 09:57:23

标签: php runtime

我在谷歌搜索上没有看到很多东西,或者在运行时对PHP最大类处理有任何疑问。

假设我有一个自定义的arrayaccess类,可容纳最多8k个“User”类型的对象。

由于arrayaccess课程不允许我这样做:

$d[0]->username = "sam"

当你执行foreach()每个循环带出一个对象但是数组本身没有任何对象时,只为剩余对象设置类,就像我可以在迭代器中一样,它只是分配一个新的填充对象(允许您在数组的每个循环中反复重复使用内存中的相同位置。我只能在offsetGet()类中的数组偏移量内的arrayaccess方法中设置一个对象。因此,我需要在此arrayaccess类中的任何一个点(甚至可能是20k对象)中容纳任何高达8K对象的任何东西。

因此,arrayaccess类中的每个偏移量都可以是“用户”的对象,最多可以有20k(至少8k)。

我的问题是: PHP能否处理这么多类实例?我的意思是这是很多课程,我担心这很容易破坏我的记忆消耗。

4 个答案:

答案 0 :(得分:5)

您正在谈论对象而不是类。

PHP处理大量对象没有问题,但如果出现问题,只需增加memory_limit中的php.ini

答案 1 :(得分:2)

您可以实例化的类(对象)通常受内存限制的约束。因此,它取决于每个对象消耗的内存量和对象总数。

因此,您实际需要测试对象将消耗多少内存。我为demonstration purposes做了一点测试。那个显示了439 000对象实例的stdClass个实例可能有128m个内存限制:

$store = array();
$max = 500001;
for($i = 0; $i < $max; $i++)
{
    if ($i % 1000 === 0)
        echo $i, '(', number_format(memory_get_usage(),0, '',' '),')', "\n";
        ;
    $obj = new stdClass;
    $obj->name = 'just some data';
    $store[] = $obj;
    unset($obj);
}

所以回答你的问题:你需要测试你的场景实际消耗了多少内存,这将显示你可以拥有多少个对象实例。它不是arrayaccess,而是实际的对象实例数以及与应用程序总数相关的数据。

请参阅:PHP: do arrays have a maximum size?

答案 2 :(得分:1)

  

我的问题是:PHP能够处理这么多的类实例吗?我的意思是这是很多课程,我担心这很容易破坏我的记忆消耗。

我的座右铭是;如果你问有关限制的问题,你可能做错了什么。为什么你需要一个类的8k实例?一个简单的数组不足以满足这个特定情况吗?你在建一个清单吗?如果是这样,实施分页不是很有益吗?

我尽可能地使用物品,当他们被召唤时。如果您正在使用8k的对象,那么您可能正在执行类似报告的操作,其中实例化对象并不适合,并且通常不鼓励使用。如果要进行报告,请使用简单数组(因为您实际上不会使用对象的行为),或将计算保留在数据库中。

答案 3 :(得分:0)

问题是:你能用吗?它适用于索引数组

http://sandbox.phpcode.eu/g/38fde.php

这很好用

<?php 
class c1{ 
   function c1(){ 
      echo 'c1'; 
   } 
} 
class c2{ 
   public $username; 
   function c2(){ 
      echo '_c2'; 
   } 
   function getUsername(){ 
       echo $this->username; 
   } 
} 

$c[0] = new c1(); 
$c[1] = new c2(); 
$c[1]->username = "test"; 
$c[1]->getUsername();