이 글의 내용은 PHP7 Kernel Analysis 4의 지역변수, 전역변수, 상수에 대한 내용입니다. 이제 필요하신 분들이 참고하시면 좋을 것 같습니다.
1. 지역변수
지역변수 할당 PHP zend_execute_data 구조에서 zend_op_array를 실행할 때마다 새로운 zend_execute_data가 생성됩니다. 로컬 변수는 실행 시작 시 할당되고 실행이 끝나면 해제됩니다.
읽기 및 쓰기 작업: 로컬 변수는 컴파일 시간에 결정된 숫자를 통해 읽고 씁니다
2. 정적 변수
정적 변수의 저장 위치: zend_op_array->static_variables, 이는 해시입니다. 따라서 PHP의 정적 변수는 일반 로컬 변수와 달리 zend_execute_data 실행 공간에 할당되지 않고 해시 테이블 형태로 zend_op_array에 저장됩니다. 정적 변수는 한 번만 초기화됩니다. 참고: 초기화는 실행 단계가 아닌 컴파일 단계에서 발생합니다. 또한 이 기능은 정적 변수의 초기 값이 다음과 같은 변수일 수 없음을 의미합니다. static $count = $xxx; 이러한 정의는 오류를 발생시킵니다
읽기 및 쓰기 작업: 먼저 변수 이름에 따라 static_variables에서 해당 zval을 가져온 다음 이를 참조 유형으로 수정하고 지역 변수에 할당합니다. 즉, static $count = 4; 엄밀히 말하면 $count 두 가지 작업이 포함되어 있습니다. 이는 실제 정적 변수가 아니며, 실행 시 실제 작업은 다음과 같습니다. $count = & static_variables["count"] ;
3. 전역 변수
전역 변수는 전체 요청 실행 중에 항상 존재하며 EG의 기호_테이블(executor_globals, Zend 실행기 관련 전역 변수)에 저장됩니다. 정적 변수 저장, 이는 zend_execute_ex 실행이 시작되기 전의 해시 테이블이기도 합니다.
읽기 및 쓰기 작업: 정적 변수 액세스와 마찬가지로 전역 변수도 원본을 변환합니다. 값을 참조로 지정한 다음 가져온 범위에 전역 변수를 만듭니다. 로컬 변수는 참조
4를 가리킵니다. 상수는 EG의 zend_constants 해시 테이블에 저장됩니다. . 접속 시 상수 이름
typedef struct _zend_constant { zval value; //常量值 zend_string *name; //常量名 } zend_constant;에 따라 해시 테이블에서도 직접 검색됩니다. 관련 추천:
PHP7 커널 분석 1 CGI 및 FastCGI
PHP7 커널 분석 2 I/O 모델
위 내용은 PHP7 커널 분석 4 지역 변수, 전역 변수, 상수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!