PHP 확장 함수에 대한 매개변수 유형 바인딩 작성

巴扎黑
풀어 주다: 2023-03-03 12:26:01
원래의
1514명이 탐색했습니다.

이를 통해 타입바인딩을 구현하는 방법을 살펴보겠습니다. 그런데 이 기능은 PHP5인 Zend Engine 2에서만 사용할 수 있습니다. ZE2의 인수 정보 구조를 다시 살펴보겠습니다. 각 인수 정보 구조의 선언은 ZEND_BEGIN_ARG_INFO() 또는 ZEND_BEGIN_ARG_INFO_EX() 매크로 함수로 시작하고 그 뒤에 ZEND_ARG_*INFO() 매크로 함수의 여러 줄이 이어지며 마지막으로 ZEND_END_ARG_INFO() 매크로 함수로 끝납니다. PHP 언어로 count() 함수를 다시 작성하려면 다음과 같이 할 수 있습니다.
ZEND_FUNCTION(sample_count_array)
{
zval *arr
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a" ,&arr) == FAILURE) {
                                               meters() 자체는 전달이 보장됩니다. 전달된 매개변수는 배열입니다. 하지만 zend_get_parameter() 함수를 통해 매개변수를 받으면 운이 좋지 않아 직접 유형 검사를 수행해야 합니다. 커널이 자동으로 유형 교정을 완료하도록 하려면 arg_info가 작동해야 합니다:
ZEND_BEGIN_ARG_INFO(php_sample_array_arginfo, 0)
ZEND_ARG_ARRAY_INFO(0, arr, 0)
ZEND_END_ARG_INFO()

. 또한 생성된 오류 메시지가 API를 사용하려는 스크립트 작성자에게 더 의미 있을 수 있도록 인수에 이름을 지정하여 특정 클래스 또는 특정 구현에서 상속되는지 여부를 제한하기 위해 인수의 개체를 확인할 수도 있습니다. 인터페이스 등등.
ZEND_BEGIN_ARG_INFO(php_sample_class_arginfo, 0)
ZEND_ARG_OBJ_INFO(1, obj, stdClass, 0)
ZEND_END_ARG_INFO()
이때 첫 번째 파라미터의 값은 1이라는 점에 유의하셔야 하며, 이는 참조로 전달됨을 나타냅니다. 실제로 이 매개변수는 객체에 거의 쓸모가 없습니다. ZE2의 모든 객체는 함수 매개변수로 사용될 때 기본적으로 참조로 전달되기 때문입니다. 하지만 확장 프로그램이 PHP4와 호환되는 것을 원하지 않는 한 이 매개변수를 숫자 1로 설정해야 합니다. PHP4에서는 객체가 참조가 아닌 완전한 복사본으로 전달됩니다.

배열 및 객체 매개변수의 경우 NULL이 허용되는 마지막 매개변수를 잊지 마세요. 자세한 내용은 6장 마지막 부분의 설명을 참조하세요.
arg info를 통한 타입 바인딩 기능은 PHP5+인 ZE2에서만 유효합니다. PHP4에서 해당 함수를 구현하려면 zend_get_parameters() 함수를 사용하여 매개변수를 받은 다음 Z_TYPE_P() 매크로 함수를 사용하여 매개변수 유형을 감지하거나 Convert_to_type() 함수를 사용하여 유형을 수행해야 합니다. 변환.

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!