PHP5의 새로운 stdClass 내부 예약 클래스

高洛峰
풀어 주다: 2023-03-03 20:08:01
원래의
811명이 탐색했습니다.

stdClass 클래스는 PHP의 내부 예약 클래스입니다. 처음에는 멤버 변수나 멤버 메서드가 없습니다. 모든 매직 메서드는 이를 사용하여 변수 매개변수를 전달할 수 있습니다. 라고 불리는. stdClass 클래스는 상속될 수 있지만 그렇게 하는 데는 거의 의미가 없습니다.

이 클래스는 PHP의 예약 클래스이며 모든 클래스의 기본 클래스는 아닙니다.

<?php 
class foo {} 
$bar = new foo(); 
echo $bar instanceof stdClass?&#39;yes&#39;:&#39;no&#39;; 
//output:no
로그인 후 복사

또 다른 예:

<?php 
// CTest does not derive from stdClass 
class CTest { 
public $property1; 
} 
$t = new CTest; 
var_dump($t instanceof stdClass); // false 
var_dump(is_subclass_of($t, &#39;stdClass&#39;)); // false 
echo get_class($t) . "\n"; // &#39;CTest&#39; 
echo get_parent_class($t) . "\n"; // false (no parent) 
?>
로그인 후 복사

(객체)를 사용하는 모든 캐스트는 stdClass의 인스턴스를 생성합니다.


PHP의 stdClass 클래스 이해

stdClass는 PHP5에서만 인기를 얻었습니다. 그리고 stdClass는 zend의 예약 클래스이기도 합니다. stdClass는 PHP의 기본 클래스입니다.
거의 모든 클래스가 이 클래스를 상속하므로 언제든지 새 클래스가 될 수 있고 이 변수는 객체가 될 수 있습니다. 동시에
이 기본 클래스에는 또 다른 특별한 기능이 있습니다. 즉, 메서드가 없다는 것입니다. new stdClass(),
를 사용하는 모든 변수는 $a->test() 방식으로 사용할 수 없습니다. PHP5 객체의 독특한 점은 객체가 어디서든 호출될 때
가 참조 주소 유형이므로 리소스를 덜 소모한다는 것입니다. 다른 페이지에서 값을 할당할 때 복사본을 참조하는 대신 직접 수정됩니다.

위의 정의는 대부분 정확하지만 치명적인 진단 오류가 있습니다. stdClass는 PHP의 기본 클래스이며 거의 모든 클래스가 이 클래스를 상속합니다. 간단한 예를 살펴보십시오.

class EmptyClass { 

} 
$object = new EmptyClass(); 
if ($object instanceof stdClass) { 
echo &#39;yes&#39;; 
}else{ 
echo &#39;no&#39;; 
}
로그인 후 복사

은 코드를 실행하고 "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 클래스는 멤버 변수와 멤버 메서드가 없는 클래스입니다. 모든 매직 메서드, 상위 클래스, 인터페이스 등은 초기화 중에 NULL로 설정됩니다. PHP에서는 동적으로 클래스에 메서드를 추가할 수 없기 때문에 이 클래스는 일반적인 사용법이기도 한 동적 속성을 처리하는 데에만 사용할 수 있습니다.

요약하자면:
stdClass 클래스는 PHP의 내부 예약 클래스입니다. 처음에는 멤버 변수나 멤버 메서드가 모두 NULL로 설정되어 있으며 이를 사용하여 변수를 전달할 수 있습니다. 매개변수는 있지만 호출할 메소드가 없습니다. stdClass 클래스는 상속될 수 있지만 그렇게 하는 데는 거의 의미가 없습니다.

PHP5의 새로운 stdClass 내부 예약 클래스와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


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