>  기사  >  백엔드 개발  >  PHP 인스턴스 분석 stdClass 클래스

PHP 인스턴스 분석 stdClass 클래스

伊谢尔伦
伊谢尔伦원래의
2017-06-30 10:18:091044검색

이 글은 주로 PHP 소스 코드 분석 관점에서 stdClass 클래스에 대한 심층적인 이해를 소개하고, 필요한 친구들이 참고할 수 있도록 stdClass 클래스가 무엇인지 요약합니다.

바이두 백과사전에서 stdClass의 정의는 다음과 같습니다. 다음:

stdClass는 PHP5에서만 인기를 얻었습니다. 그리고 stdClass는 zend의 예약 클래스이기도 합니다. stdClass는 PHP의 기본 클래스입니다.

거의 모든 클래스가 이 클래스를 상속하므로 언제든지 새 클래스가 될 수 있고 이 변수는 객체가 될 수 있습니다. 동시에 이 기본 클래스에는 또 다른 특별한 기능이 있습니다. 즉, 메서드가 없습니다. new stdClass()를 사용하는 모든 변수는 $a->test() 방식으로 사용되지 않습니다. PHP5의
객체
의 독특한 점은 객체가 어디서든 호출될 때 는 참조 주소 유형이므로 상대적으로 리소스를 덜 소모한다는 것입니다. 다른 페이지에서 값을 할당할 때 복사본을 참조하는 대신 직접 수정됩니다.
위 정의는 대부분 정확하지만 치명적인 진단 오류가 있습니다. stdClass는 PHP의 기본 클래스이며 거의 모든 클래스가 이 클래스를 상속합니다. 간단한 예를 살펴보십시오.

class EmptyClass {
}
$object = new EmptyClass();
if ($object instanceof stdClass) {
    echo 'yes';
}else{
    echo 'no';
}

는 코드를 실행하고 "no"를 출력합니다. 이 예는 stdClass 클래스가 모든 클래스의 기본 클래스가 아님을 완전히 보여줍니다. 이는 단지 PHP의 예약된 클래스이거나 strlen 함수와 유사한 역할입니다. 소스 코드 관점에서 stdClass 클래스의 구현을 살펴보겠습니다. 등록 위치는 Zend/zend_buildin_functions.c 파일에 있습니다.

ZEND_MINIT_FUNCTION(core) { /* {{{ */
    zend_class_entry class_entry;
    /* 注册stdClass 类 */
    INIT_CLASS_ENTRY(class_entry, "stdClass", NULL);
    zend_standard_class_def = zend_register_internal_class(&class_entry TSRMLS_CC);
    /* 注册默认类,接口,如Exception类,SPL中的一些类等 */
    zend_register_default_classes(TSRMLS_C);   
    return SUCCESS;
}
/* }}} */

이것은 zend_builtin_module의 모듈 초기화 함수입니다. 이 함수는 PHP 커널이 모듈 초기화 작업을 수행할 때 자동으로 로드됩니다. 이러한 방식으로 stdClass 클래스의 등록 작업도 실행됩니다. 이 코드에서 볼 수 있듯이 stdClass 클래스는 멤버 변수도 없고

멤버 메서드

도 없는 클래스입니다. 모든 magic 메서드, 상위 클래스, 인터페이스 등은 초기화 중에 NULL로 설정됩니다. PHP에서는 동적으로 클래스에 메서드를 추가할 수 없기 때문에 이 클래스는 일반적인 사용법이기도 한 동적 속성을 처리하는 데에만 사용할 수 있습니다. 요약하자면:

stdClass는 PHP의 내부 예약 클래스입니다. 처음에는 멤버 변수나 멤버 메서드가 없습니다. 이를 사용하여 변수 매개변수를 전달할 수 있습니다. 메소드를 호출할 수 있습니다. stdClass 클래스는 상속될 수 있지만 그렇게 하는 것은 의미가 없습니다.

위 내용은 PHP 인스턴스 분석 stdClass 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.