Articles of php internals

Синтаксис / оператор массива PHP?

При написании синтаксиса для ассоциативного массива в PHP мы делаем следующее $a = array('foo' => 'bar'); Мне любопытно отношение синтаксиса => или, возможно, оператора. Связано ли это с какой-либо ссылкой, используемой в хеш-таблице в ZE, или каким-либо последующим правым сдвигом или ссылкой, используемой в C ? Я предполагаю, что мне просто интересно понять истинную основную […]

Увеличение элементов массива во время цикла foreach в php?

Рассмотрим следующий код: <?php $arr = array(); $arr['b'] = 'book'; foreach($arr as $key=>$val) { print "key=>$key\n"; if(!isset($arr['a'])) $arr['a'] = 'apple'; } ?> Он не отображает 'a'. Как foreach работает с хэш-таблицей (массивом), чтобы пересечь каждый элемент. Если списки реализуются, почему я не могу добавить больше во время выполнения? Пожалуйста, не говорите мне, что я мог […]

Статус пула PHP-FPM процесса last-request-cpu

Я установил PHP и включил функцию FPM, но я не уверен в данных о состоянии FPM (например, процесс last-request-cpu), ниже приведена подробная информация о php-fpm.conf. [www] ; Unix user/group of processes user = www-data group = www-data ; Chdir to this directory at the start. chdir = / ; The address on which to accept […]

Почему file_get_contents быстрее, чем memcache_get?

Я загружаю файлы XML с диска с помощью file_get_contents, и, как тест, я нахожу, что могу загрузить файл 156K с помощью file_get_contents() 1000 раз за 3,99 секунды. Я подклассифицировал часть, которая загружает и заменяет ее слоем memcache, а на моем компьютере-разработчике я могу сделать 1000 загрузок одного и того же документа за 4.54 секунды. Я […]

Является ли механизм Zend встраиваемым вне PHP?

Один из оригинальных проектов двигателя Zend, если я помню, заключался в том, что его было относительно легко внедрять для других языков, которые можно было бы создать. В принципе, синтаксис PHP без всех модулей PHP. Это все еще так?

Почему foreach копирует массив, когда мы не модифицировали его в цикле?

В сообщении в блоге «PHP Internals: When foreach copy» NikiC заявила, что в коде вроде этого: Фрагмент 1 $array = range(0, 100000); foreach ($array as $key => $value) { xdebug_debug_zval('array'); // array is not copied, only refcount is increased } foreach не будет копировать массив, потому что единственное, что foreach модифицирует около $array , это […]

Как добавить массив как свойство объекта в класс, объявленный в PHP-расширении?

Я хочу, чтобы мое расширение PHP объявляло класс, эквивалентный следующему PHP: class MyClass { public $MyMemberArray; __construct() { $this->MyMemberArray = array(); } } Я следую примерам в « Расширенном программировании на PHP » и « Расширении и встраивании PHP », и я могу объявить класс, который имеет целочисленные свойства в PHP_MINIT_FUNCTION . Однако, когда я […]

Где найти «низкую память» и «свободные циклы процессора» вызывает запуск сбора мусора на unset ()?

Я часто нахожу ссылки на следующую цитату, используемую при объяснении того, что PHP unset() не запускает «сборку мусора» немедленно, но только тогда, когда она считает нужным (выделение мое): unset () делает то, что говорит его имя, – отключает переменную. Это не приводит к немедленному освобождению памяти. Сборщик мусора PHP будет делать это, когда он увидит […]

Что именно происходит при создании экземпляра с помощью «нового»?

Рассмотрим следующий код: class a { public $var1; function disp(){ echo $this->var1; } } $obj1 = new a; echo '<br/>After instantiation into $obj1:<br/>'; xdebug_debug_zval('obj1'); $obj1->var1 = "Hello "; echo '<br/><br/>After assigning "Hello" to $obj->var1:<br/>'; $obj1->disp(); echo "<br/><br/>"; xdebug_debug_zval('obj1'); Выход: После создания экземпляра в $ obj1: obj1: (refcount = 1, is_ref = 0) = class a […]

В каком порядке объекты уничтожены в PHP?

Каков точный порядок деконструкции объекта? Из тестирования у меня есть идея: FIFO для текущей области. class test1 { public function __destruct() { echo "test1\n"; } } class test2 { public function __destruct() { echo "test2\n"; } } $a = new test1(); $b = new test2(); Который дает снова и снова результаты: test1 test2 Руководство по […]