zend의 배열 작업 컴파일
- WBOY원래의
- 2016-07-29 08:58:111145검색
배열의 값은 zvalue_value.ht 필드에 저장되며, ht는 HashTable의 데이터입니다.
Zend/zend_vm_execute.h 파일에서
static int ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op * opline = EX(opline);
array_init(&EX_T(opline->result.u.var).tmp_var); //배열 메모리 공간 할당, 초기화
if (IS_CV == IS_UNUSED) {
ZEND_VM_NEXT_OPCODE();
#if 0 || 🎜>#endif }
}
배열을 초기화하는 함수는 array_init
ZEND_API int _array_init(zval *arg, uint 크기 ZEND_FILE_LINE_DC ) /* {{{ */
{
ALLOC_HASHTABLE_REL(Z_ARRVAL_P(arg)); //메모리 할당
_zend_hash_init(Z_ARRV AL_P(arg) , size, NULL, ZVAL_PTR_DTOR, 0 ZEND_FILE_LINE_RELAY_CC);
Z_TYPE_P(arg) = IS_ARRAY; //유형은 배열입니다
return SUCCESS;
}
아니요, 해시 테이블 초기화 함수 _zend_hash_init
PHP 확장에서는 다음과 같이 작성할 수 있습니다: OL( EG( active_symbol_table),"star",value);
요소의 키 코드 추가
add_assoc_long(zval *array, char *key, long n);
add_assoc_unset(zval *array, char *key); 설정되지 않은 요소를 추가합니다.
add_assoc_bool(zval *array, char *key, int b); 부울 값을 추가합니다.
add_assoc_resource(zval *array, char *key, int r);
add_assoc_double(zval *array, char *key, double d); 부동 소수점 값을 추가합니다.
add_assoc_string(zval *array, char *key, char *str, int Duplicate); Duplicate는 이 문자열을 Zend의 내부 메모리에 복사해야 하는지 여부를 나타내는 데 사용됩니다.
add_assoc_stringl(zval *array, char *key, char *str, uint length, int Duplicate); 지정된 길이의 문자열을 추가합니다.
add_assoc_zval(zval *array, char *key, zval *value); zval 구조를 추가합니다.
add_index_long(zval *array, uint idx, long n); 긴 정수 요소를 추가합니다.
add_index_unset(zval *array, uint idx); 설정되지 않은 요소를 추가합니다.
add_index_bool(zval *array, uint idx, int b); 부울 값을 추가합니다.
add_index_resource(zval *array, uint idx, int r);
add_index_double(zval *array, uint idx, double d); 부동 소수점 값을 추가합니다.
add_index_string(zval *array, uint idx, char *str, int Duplicate)
문자열을 추가합니다. Duplicate는 이 문자열을 Zend의 내부 메모리에 복사해야 하는지 여부를 나타내는 데 사용됩니다.
add_index_stringl(zval *array, uint idx, char *str, uint length, int Duplicate); 지정된 길이의 문자열을 추가합니다.
add_index_zval(zval *array, uint idx, zval *value); zval 구조를 추가합니다.
add_next_index_long(zval *array, long n); 긴 정수 요소를 추가합니다.
add_next_index_unset(zval *array); 설정되지 않은 요소를 추가합니다.
add_next_index_bool(zval *array, int b); 부울 값을 추가합니다.
add_next_index_resource(zval *array, int r); 리소스를 추가합니다.
add_next_index_double(zval *array, double d); 부동 소수점 값을 추가합니다.
add_next_index_string(zval *array, char *str, int Duplicate); Duplicate는 이 문자열을 Zend의 내부 메모리에 복사해야 하는지 여부를 나타내는 데 사용됩니다.
add_next_index_stringl(zval *array, char *str, uint length, int Duplicate); 지정된 길이의 문자열을 추가합니다.
add_next_index_zval(zval *array, zval *value); zval 구조를 추가합니다. 다른 배열, 개체 또는 데이터 스트림을 추가합니다.
이상은 다양한 측면을 포함하여 zend의 배열 연산에 대한 소개입니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.
성명:본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.