>백엔드 개발 >PHP 튜토리얼 >PHP stdClass의 내부 예약 클래스 사용 예에 ​​대한 자세한 설명

PHP stdClass의 내부 예약 클래스 사용 예에 ​​대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-06-30 10:20:541101검색

stdClass 클래스는 PHP의 내부 예약 클래스입니다. 처음에는 멤버 변수도 없고 멤버 메서드도 없습니다. 모든 magic 메서드는 NULL로 설정되어 있으며 변수 매개변수를 전달하는 데 사용할 수 있습니다. 라고 할 수 있습니다. 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) 
?>

모든 캐스트를 사용하여 (object)은 stdClass의 인스턴스를 가져옵니다.

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

위 내용은 PHP stdClass의 내부 예약 클래스 사용 예에 ​​대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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