Comments 10
Спасибо за статью.
А какими ресурсами вы пользовались для поиска какой макрос что делает или какой макрос нужен, чтобы выполнить нужное действие?
Тоже в свободное время «копаю» исходники php, и, зачастую, тратится больше всего времени именно на поиск макроса.
А какими ресурсами вы пользовались для поиска какой макрос что делает или какой макрос нужен, чтобы выполнить нужное действие?
Тоже в свободное время «копаю» исходники php, и, зачастую, тратится больше всего времени именно на поиск макроса.
0
На php я думаю было бы так:
$array = [1,2,3];
$number = array_sum($array);
$count = count($array);
Возможно и в исходниках подобное есть.
$array = [1,2,3];
$number = array_sum($array);
$count = count($array);
Возможно и в исходниках подобное есть.
0
Спасибо, что напомнили, для интереса посмотрел реализацию кода, грубо говоря тот же подход, за исключением, проверки типа данных и использования внутренней функции fast_add_function
PHP_FUNCTION(array_sum)
{
zval *input,
*entry,
entry_n;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "a", &input) == FAILURE) {
return;
}
ZVAL_LONG(return_value, 0);
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(input), entry) {
if (Z_TYPE_P(entry) == IS_ARRAY || Z_TYPE_P(entry) == IS_OBJECT) {
continue;
}
ZVAL_COPY(&entry_n, entry);
convert_scalar_to_number(&entry_n);
fast_add_function(return_value, return_value, &entry_n);
} ZEND_HASH_FOREACH_END();
}
+1
если можно, поправьте тэги к посту. плиз :)
0
Когда писал расширения помогал хороший бложек: https://adobkin.com/. Там много информации про устройство зенда и плюшек PHP. Возможно кому-то будет полезно.
0
За предыдущую статью честно хотел поставить минус, но не успел. А вот за эту — плюсанул.
Одно смутило:
Из какого собственно справочника?
P.S.
Мне нужно портировать свой маленький экстеншн с 5.6 на 7, и я запнулся именно на массивах, и в т.ч. на аргументах, которые передаются по ссылке. Если будете продолжать — напишите пожалуйста про аргументы, которые передаются по ссылке :)
Одно смутило:
Для наглядности приведу из справочника все макросы:
Из какого собственно справочника?
P.S.
Мне нужно портировать свой маленький экстеншн с 5.6 на 7, и я запнулся именно на массивах, и в т.ч. на аргументах, которые передаются по ссылке. Если будете продолжать — напишите пожалуйста про аргументы, которые передаются по ссылке :)
0
Изучаю исходники PHP просто ради спортивного интереса.
https://wiki.php.net/phpng-upgrading
А что за расширение писали?
https://wiki.php.net/phpng-upgrading
А что за расширение писали?
+1
Огромное спасибо!
Расширение писал для ускорения кода для "внутренних нужд". Различные нативные альтернативы фолбэкам на чистом PHP, например, получение значения многомерного массива по ключу вида firstLevel.secondLevel.thirdLevel ([firstLevel => [secondLevel => [thirdLevel => someValue]]])
. Ну и куча прочих функций для "микооптимизаций".
0
Only those users with full accounts are able to leave comments. Log in, please.
Макросы Zend обхода циклов (HashTable Iteration)