이 기사의 예에서는 Zend Framework 튜토리얼에서 Zend_Registry 개체의 사용법을 설명합니다. 참고하실 수 있도록 모두와 공유해 주세요. 자세한 내용은 다음과 같습니다.
객체 레지스트리(Registry) 사용
객체 레지스트리(또는 객체 웨어하우스)는 전체 애플리케이션 공간에서 사용되는 객체입니다. . 객체와 값을 저장하는 컨테이너입니다. 여기에 개체를 저장하면 프로젝트 전체 어디에서나 동일한 개체를 사용할 수 있습니다. 이 메커니즘은 전역 저장소와 동일합니다.
Zend_Registry 클래스의 정적 메서드를 통해 개체 레지스트리를 사용할 수 있습니다. 또한 이 클래스는 배열 개체이므로 배열 형식을 사용하여 클래스 메서드에 액세스할 수 있습니다.
1. 레지스트리에 값을 설정합니다.
레지스트리에 콘텐츠를 저장하려면 정적 메서드 set()을 사용할 수 있습니다.
예제 1. set() 사용 예:
Zend_Registry::set('index', $value);
$value는 객체, 배열 또는 스칼라일 수 있습니다. set()을 다시 사용하여 레지스트리에 이미 있는 값으로 새 값을 설정할 수 있습니다.
인덱스 매개변수는 배열을 사용하는 것처럼 스칼라, 문자열 또는 정수일 수 있으며 배열의 인덱스/키 이름과 유사합니다.
2. 레지스트리에서 값 가져오기
get() 메서드를 사용하여 레지스트리에서 항목 값을 가져올 수 있습니다.
예 2. get() 메서드 예:
$value = Zend_Registry::get('index');
getInstance()는 정적 레지스트리 개체를 반환합니다.
레지스트리 객체는 반복 가능합니다.
예 3. 레지스트리 개체 반복:
$registry = Zend_Registry::getInstance(); foreach ($registry as $index => $value) { echo "Registry index $index contains:/n"; var_dump($value); }
3. 추가로 레지스트리 개체를 만듭니다.
using 정적 메서드를 사용하여 레지스트리 개체에 액세스하는 것 외에도 일반 개체를 사용하는 것처럼 직접 인스턴스화할 수 있습니다.
정적 메소드를 통해 레지스트리 객체의 인스턴스에 접근하면 정적 저장이 편리하고 프로그램 내 어디에서나 접근이 가능하다.
기존의 새로운 방법을 사용하여 레지스트리 인스턴스를 생성하는 경우 배열을 사용하여 레지스트리 내용을 초기화할 수 있습니다.
예제 4. 레지스트리 객체 생성
$registry = new Zend_Registry(array('index' => $value));
이 객체 인스턴스를 생성한 후 배열 객체 메소드를 사용하여 사용할 수 있습니다. , 또는 정적 메소드 setInstance()를 통해 이 객체 인스턴스를 정적 객체 인스턴스로 설정할 수 있습니다.
예 5. 정적 레지스트리 초기화 예
$registry = new Zend_Registry(array('index' => $value)); Zend_Registry::setInstance($registry);
정적 레지스트리 객체가 초기화된 경우 setInstance() 메서드는 Zend_Exception 예외를 발생시킵니다.
4. 배열처럼 레지스트리 객체에 접근
한 번에 여러 값에 접근하거나 설정하고 싶다면 배열 방식을 사용하는 것이 매우 편리하다는 것을 알 수 있습니다.
예 6. 배열 메소드 액세스 예시:
$registry = Zend_Registry::getInstance(); $registry['index'] = $value; var_dump( $registry['index'] );
5. 객체 메소드 액세스 레지스트리
또한 개체의 속성 이름을 인덱스로 사용하여 개체 지향 스타일을 사용하여 레지스트리 개체에 액세스하는 것이 편리합니다. 이렇게 하려면 ArrayObject::ARRAY_AS_PROPS 옵션을 사용하여 레지스트리 개체를 생성하고 정적 인스턴스를 초기화해야 합니다. 정적 레지스트리에 처음으로 액세스하기 전에 이 작업을 수행해야 합니다. 이 옵션을 사용할 때 일부 PHP 버전에는 버그가 있으므로 이 옵션을 주의해야 합니다.
예 7. 객체 형태로 접근:
//在你的bootstrap代码中: $registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS) Zend_Registry::setInstance($registry); $registry->tree = 'apple'; . . . //在程序的任何其它地方: $registry = Zend_Registry::getInstance(); echo $registry->tree; // echo's "apple" $registry->index = $value; var_dump($registry->index);
6. 인덱스 존재 여부를 쿼리
할 수 있습니다. 사용되는 정적 메소드 isRegistered()는 특정 인덱스에 해당 값 세트가 있는지 쿼리합니다.
예 8. isRegistered() 예:
if (Zend_Registry::isRegistered($index)) { $value = Zend_Registry::get($index); }
배열 객체의 특정 인덱스 값이 설정되었는지 확인하려면 정의하면 일반 배열과 마찬가지로 isset() 함수를 사용할 수 있습니다.
예 9. isset() 예:
$registry = Zend_Registry::getInstance(); // using array-access syntax if (isset($registry['index'])) { var_dump( $registry['index'] ); } // using object-access syntax, if enabled if (isset($registry->index)) { var_dump( $registry->index ); }
7. 확장 레지스트리 객체
정적 레지스트리 객체 Zend_Registry 클래스의 인스턴스입니다. 여기에 기능을 추가하려면 Zend_Registry 클래스를 상속한 다음 이 클래스를 사용하여 개체 레지스트리에 액세스하도록 지정할 수 있습니다. 정적 메소드 setClassName()을 사용하여 사용할 클래스를 지정할 수 있습니다. 이 클래스는 Zend_Registry의 하위 클래스여야 합니다.
예 10. 정적 레지스트리의 클래스 이름 지정:
Zend_Registry::setClassName('My_Registry'); Zend_Registry::set('index', $value);
레지스트리가 완료된 후 이를 설정하려고 하면 클래스 이름에 액세스하면 레지스트리에서 예외가 발생합니다. 부스트랩 코드(예: index.php)에서 이 클래스 이름을 설정하는 것이 좋습니다.
8. 정적 레지스트리 삭제
필수는 아니지만 _unsetInstance() 메서드를 사용하여 레지스트리의 정적 인스턴스를 삭제할 수 있습니다.
[참고] 데이터 손실 위험
_unsetInstance()를 사용하면 정적 레지스트리의 모든 데이터가 손실되며 복구할 수 없습니다.
가끔 _unsetInstance() 메서드가 필요할 수도 있습니다. 예를 들어, 레지스트리 객체가 초기화된 후 setInstance() 또는 setClassName()을 사용하려는 경우 해당 메서드를 사용하기 전에 _unsetInstance()를 사용하여 정적 인스턴스를 삭제할 수 있습니다.
예제 11. _unsetInstance() 예:
Zend_Registry::set('index', $value); Zend_Registry::_unsetInstance(); // 改变我们要使用的类 Zend_Registry::setClassName('My_Registry'); Zend_Registry::set('index', $value);
도움이 되었습니다.
Zend Framework 튜토리얼 Zend_Registry 객체 사용 분석 관련 기사를 더 보려면 PHP 중국어 웹사이트를 주목하세요!