PHP 5 개체 시스템

*본 고 는《Classes and Objects in PHP 5》시리즈 의 글 에 대한 보충 과 수정 으로 PHP 5 대상 체계의 전체적인 구 조 를 소개 하 였 으 나 일부 특성 은 구체 적 으로 소개 하지 않 았 다.'Classes and Objects in PHP 5'를 읽 고 본문 을 읽 는 것 을 강력 히 권장 합 니 다.PHP 5 가 내 놓 은 대상 체 계 는 여러분 이 가장 기대 하 는 것 이 라 고 믿 습 니 다.PHP 5 는 자바 2 의 대상 모델 을 참고 하여 비교적 강력 한 대상 프로 그래 밍 지원 을 제 공 했 고 PHP 를 사용 하여 OO 를 실현 하면 가 볍 고 자 연 스 러 워 질 것 이다.대상 전달 PHP 5 는 Zend 엔진 II 를 사용 합 니 다.대상 은 다른 일반 변수 처럼 Zval 에 저장 되 지 않 고 독립 된 구조 Object Store 에 저 장 됩 니 다(PHP 4 에 서 는 대상 이 일반 변수 와 같이 Zval 에 저 장 됩 니 다).Zval 에 내용(value)대신 대상 의 포인터 만 저장 합 니 다.우리 가 대상 을 복사 하거나 대상 을 매개 변수 로 함수 에 전달 할 때 데 이 터 를 복사 할 필요 가 없습니다.같은 대상 포인터 만 유지 하고 다른 zval 에서 현재 이 특정한 대상 이 가리 키 는 Object Store 를 알려 줍 니 다.대상 자체 가 Object Store 에 있 기 때문에 우 리 는 이 대상 의 지침 을 가 진 모든 zval 구조 에 영향 을 줄 것 입 니 다.-프로그램 에서 목표 대상 의 모든 변화 가 소스 대상 에 영향 을 줄 것 입 니 다.이 는 PHP 대상 이 항상 인용(reference)을 통 해 전달 되 는 것 처럼 보이 기 때문에 PHP 의 대상 은 기본적으로'인용'을 통 해 전달 되 며,PHP 4 에서 처럼&를 사용 하지 않 아 도 됩 니 다.쓰레기 회수 메커니즘 의 일부 언어,가장 전형 적 인 예 를 들 어 C 는 데이터 구 조 를 만 들 때 메모리 분 배 를 명시 적 으로 요구 해 야 합 니 다.메모리 에 할당 되면 변수 에 정 보 를 저장 할 수 있 습 니 다.또한 변 수 를 사용 할 때 메모 리 를 사용 해 야 합 니 다.이것 은 기계 가 다른 변 수 를 비 워 서 메모리 소 모 를 피 할 수 있 습 니 다.PHP 는 더 이상 필요 하지 않 은 대상 을 지 우 는 메모리 관 리 를 자동 으로 할 수 있 습 니 다.PHP 는 인용 계수(reference counting)와 같은 단순 한 쓰레기 회수(garbage collection)메커니즘 을 사용 했다.모든 대상 에는 참조 카운터 가 포함 되 어 있 으 며,모든 reference 는 대상 에 연결 되 어 있 으 며,계수 기 는 1 을 추가 합 니 다.reference 가 생존 공간 을 떠 나 거나 NULL 로 설정 되면 계수 기 는 1 을 줄 입 니 다.어떤 대상 의 인용 카운터 가 0 일 때,PHP 는 이 대상 을 더 이상 사용 하지 않 고 메모리 공간 을 방출 할 필요 가 없다 는 것 을 알 고 있 습 니 다.예:메모리 관리 에 있어 서 PHP 5 의 변화 입 니 다.별로 관심 이 없 으 실 수도 있 습 니 다.다음은 PHP 5 의 대상 모델 과 PHP 4 가 어떤 구체 적 인 차이 점 이 있 는 지 살 펴 보 겠 습 니 다.★추가 기능★개선 기능 1)★Private and Protected Members 사유 와 보호 류 구성원(속성,방법)2)★Abstract Classes and Methods 추상 류 와 추상 방법 3)★Interfaces 인터페이스 4)★Class Type Hints 유형 지시=5)★final final 키워드=6)★Objects Cloning 대상 복제=7)★Constructors and Destructors 구조 함수 와 분석 함수 8)★Class Constants 류 상수=9)★예외 이상 처리 10)★Static member 정적 클래스 구성원 11)★METHOD__ constant __METHOD__상수=12)★Reflection 반사 메커니즘 제1,2,3,7,10 은 본문의 끝 에 있 는《Classes and Objects in PHP 5》시 리 즈 를 스스로 찾 아 보 세 요.그 중에서 상세 한 소개 가 있 으 니 본 고 는 더 이상 설명 하지 않 겠 습 니 다.9 시 이상 처리 와 12 시 반사 메커니즘 의 내용 이 비교적 풍부 하고 지면 에 한 하여 글 에서 소개 하지 않 습 니 다.곧 출시 될 전자 잡지 2 기 를 주목 하고 전문 적 으로 글 을 써 서 소개 하 겠 습 니 다.다음은 4,5,6,8,11 시 언어 특성 을 소개 한다.4)★Class Type Hints 유형 은 PHP 가 약 한 유형의 언어 라 는 것 을 모두 가 알 고 있다.변 수 를 사용 하기 전에 변 수 를 설명 할 필요 가 없 는 데이터 형식 입 니 다.이것 은 프로 그래 밍 에 많은 편 의 를 가 져 왔 지만 일부 위험 도 가 져 왔 다.특히 변수의 유형 이 변화 할 때.PHP 5 에 유형 지 시 를 추가 하여 실행 과정 에서 클래스 방법의 매개 변수 유형 을 자동 으로 판단 할 수 있 습 니 다.이것 은 자바 2 의 RTTI 와 유사 합 니 다.reflection 에 맞 추 면 대상 을 잘 제어 할 수 있 습 니 다.a($b); $a->b($b); ?> 강 한 형식 언어 에 서 는 모든 변수의 유형 을 컴 파일 할 때 검사 하고,PHP 에 서 는 유형 지 시 를 사용 하여 유형 검 사 를 실행 할 때 발생 합 니 다.클래스 방법 매개 변수의 유형 이 틀 리 면'Fatal error:Argument 1 must implement interface Bar...'와 같은 오류 메 시 지 를 보 냅 니 다.다음 코드: 에 해당 하 다php function foo($object) { if (!($object instanceof ClassName)) { die("Argument 1 must be an instance of ClassName"); } } ?> 5)★final final 키워드 PHP 5 에 final 키 워드 를 새로 추 가 했 습 니 다.클래스 나 클래스 방법 전에 추가 할 수 있 습 니 다.final 로 표 시 된 클래스 방법 은 하위 클래스 에서 덮어 쓸 수 없습니다.표 지 는 final 의 클래스 로 계승 되 지 않 으 며 그 중의 방법 은 모두 final 유형 으로 기본 적 으로 한다.Final 방법: Final 클래스:6)★Objects Cloning 대상 을 복사 하기 전에 메모리 관리 부분 에서 말 했 듯 이 PHP 5 에 서 는 기본적으로 참조 전달 대상 을 사용 합 니 다.$object 2=$object 1 을 사용 하 는 방법 으로 복사 한 대상 은 서로 연 결 됩 니 다.만약 에 우리 가 원래 와 같은 대상 을 복사 하고 대상 이 원본 대상 과 관련 이 없 기 를 원한 다 면(일반 변수 처럼 값 을 통 해 전달)clone 키 워드 를 사용 해 야 합 니 다.복사 와 동시에 원본 대상 의 일부분 을 변경 하고 싶다 면 클래스 에서 를 정할 수 있 습 니 다.clone()함수,동작 추가.id = self::$id++; } /* function __clone() { $this->address = "New York"; $this->id = self::$id++; } */ } $obj = new MyCloneable(); $obj->name = "Hello"; $obj->address = "Tel-Aviv"; print $obj->id . ""; $obj_cloned = clone $obj; print $obj_cloned->id . ""; print $obj_cloned->name . ""; print $obj_cloned->address . ""; ?> 이상 코드 는 완전히 같은 대상 을 복사 합 니 다.그리고 functionclone()함수 의 설명 을 지우 고 프로그램 을 다시 실행 합 니 다.기본적으로 같 지만 일부 속성 이 변동 하 는 대상 을 복사 합 니 다.8)★Class Constants 클래스 상수 PHP 5 에서 const 키 워드 를 사용 하여 클래스 상 수 를 정의 할 수 있 습 니 다. 11) ★__METHOD__ constant __METHOD__상수METHOD__ PHP 5 에 추 가 된'마술'상수 로 클래스 방법 을 나타 내 는 이름 입 니 다.마술 상수 는 PHP 의 미리 정 의 된 상수 입 니 다.그 수 치 는 변화 할 수 있 습 니 다.PHP 에 존재 하 는 다른 마술 상수 에는 가 있 습 니 다.LINE__、__FILE__、__FUNCTION__、__CLASS__기다리다php class Foo { function show() { echo __METHOD__; } } class Bar extends Foo { } Foo::show(); // outputs Foo::show Bar::show(); // outputs Foo::show either since __METHOD__ is // compile-time evaluated token function test() { echo __METHOD__; } test(); // outputs test ?> (출처:Viphot)

좋은 웹페이지 즐겨찾기