Сколько классов может выполнять PHP?

Что-то, чего я не видел много в поиске Google, или что-то еще есть вопросы о работе с макс-классом PHPs во время выполнения.

Скажем, у меня есть собственный класс arrayaccess, который может содержать до 8k объектов типа «Пользователь».

Поскольку класс arrayaccess не позволяет мне делать:

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

И установите класс только для остаточного объекта, как я могу в iterator, когда вы делаете foreach() каждый цикл выдает объект, но сам массив не имеет объектов, он просто назначает новый населенный объект (позволяющий повторно использовать одно и то же место в памяти снова и снова) в каждом цикле массива. Я могу установить объект только в offsetGet() пределах смещения массива в классе arrayaccess . Из-за этого мне нужно было бы разместить что-либо до 8K объектов в любой точке этого класса arrayaccess (возможно, даже 20k объектов).

Поэтому каждое смещение в моем классе arrayaccess может быть объектом слова «Пользователь», и может быть до 20k из них (по крайней мере, 8k).

Мой вопрос: сможет ли PHP обрабатывать это количество экземпляров класса? Я имею в виду, что это много классов, и я беспокоюсь, что это может легко испортить потребление памяти.

Related of "Сколько классов может выполнять PHP?"

Вы говорите об объектах, а не о классах.

PHP не имеет проблем с множеством объектов, но если есть проблема, просто увеличивайте memory_limit в php.ini .

Мой вопрос: сможет ли PHP обрабатывать это количество экземпляров класса? Я имею в виду, что это много классов, и я беспокоюсь, что это может легко испортить потребление памяти.

Мой девиз: если вы задаете вопросы о лимитах, вы, вероятно, делаете что-то неправильно. Зачем вам нужны 8k экземпляров класса? Достаточно ли простого массива для этого конкретного случая? Вы строите список? Если это так, не выгодно ли реализовать пейджинг?

Я использую объекты, когда могу, и когда их требуют. Если вы используете 8k объектов, вы, вероятно, делаете что-то вроде отчетов, где экземпляр объекта не подходит и обычно не рекомендуется. Если вы хотите сделать отчетность, используйте либо простые массивы (поскольку вы фактически не будете использовать поведение объекта), либо оставите вычисления в базе данных.

Количество классов, которые вы можете создать (объекты), обычно связано пределом памяти. Таким образом, это зависит от того, сколько памяти потребляется каждым объектом и общее количество объектов.

Поэтому вам действительно нужно проверить, сколько памяти ваши объекты будут потреблять. Я собрал небольшой тест для демонстрационных целей . Это показывает, что больше 439 000 экземпляров (небольших) stdClass объекта 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); } с $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: у массивов максимальный размер?

Вопрос: можете ли вы его использовать? Он отлично работает для индексных массивов

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();