PHP 프로그래밍에서 클로저, 발전기 및 반사는 매우 중요하고 일반적으로 사용되는 기능입니다. 그들의 기본 원칙을 이해하면 이러한 기능을보다 유연하게 적용하고 개발 프로세스 중에 효율성과 코드 품질을 향상시키는 데 도움이 될 수 있습니다.
클로저는 함수 내부의 외부 범위에 액세스 할 수있는 변수를 말하며 함수가 함수 외부로 호출 되더라도 이러한 변수는 여전히 액세스 할 수 있습니다.
낮은 수준 원리 : PHP가 폐쇄를 구현하면 폐쇄를 나타내는 내부 클래스 클로저를 생성하고 폐쇄의 상태 및 기능 본문을 저장하는 객체를 만듭니다. 이 개체를 폐쇄 객체라고합니다.
간단한 폐쇄 예는 다음과 같습니다.
$ greeting = 'Hello'; $ sayHello = function ($ name) 사용 ($ greeting) { Echo $ 인사. ','. $ 이름; }; $ SayHello ( 'John'); // 출력 : 안녕하세요, 존
위 코드에서 Closure Function $ Sayhello는 외부 변수 $ Greeting 내부를 사용합니다. 클로저가 생성되면 $ Greeting 변수의 값이 폐쇄 오브젝트에 저장됩니다. 폐쇄 함수를 호출하면 저장된 $ 인사 값을 사용합니다.
생성기는 요청시 여러 값을 생성 할 수있는 함수입니다. 일반 함수와 달리 생성기 함수는 수율 키워드를 통해 리턴 할 값을 정의하는 생성기 개체를 반환합니다.
하단 원리 : 생성기 함수가 호출되면 반복자 인터페이스와 발전기 인터페이스를 구현하는 생성기 객체가 반환됩니다. 반복자 인터페이스는 생성기 객체의 반복 동작을 정의하는 반면 발전기 인터페이스는 생성기 시작, 컨텍스트 복원 등과 같은 발전기를 제어하는 메소드를 제공합니다.
간단한 생성기 예는 다음과 같습니다.
함수 카운트 다운 ($ start, $ end) { for ($ i = $ start; $ i> = $ end; $ i-) { 수율 $ i; } } $ generator = countdown (5, 1); foreach ($ generator as $ count) { echo $ count; }
위의 코드에서 카운트 다운 함수는 수율 키워드를 통해 여러 값을 반환하는 생성기 기능입니다. 발전기가 통과되면 각 반복에 대한 값을 반환합니다.
반사 기술은 런타임에 클래스, 객체, 속성, 메소드 및 기타 정보와 같은 정보를 동적으로 얻고 수정하는 기능을 말합니다.
저수준 원리 : PHP 반사는 반사 시리즈 클래스를 통해 구현됩니다. 반사 클래스는 클래스, 메소드, 속성 등과 같은 객체의 반사 함수를 구현하고 클래스 반사의 정적 메소드를 호출하여 해당 반사 객체를 얻은 다음 객체의 방법을 통해 객체의 정보를 얻거나 수정합니다.
간단한 반사 예는 다음과 같습니다.
클래스 사람 { private $ name = 'John'; 개인 기능 sayhello () { 에코 '안녕하세요,'. $ this-> 이름; } } $ person = new Person (); $ Reflection = New ReflectionClass ($ person); $ properties = $ reclection-> getProperties (ReflectionProperty :: is_private); foreach ($ properties as $ property) { echo $ property-> getName (). php_eol; } $ methods = $ 반사-> getMethods (반사 메드 :: is_private); foreach ($ methods as $ method) { echo $ method-> getName (). php_eol; }
위의 코드에서 Person 클래스는 ReflectionClass 클래스를 사용하여 반영되고 GetProperties 메소드를 호출하여 개인 속성을 얻은 다음 GetMethods 메소드를 호출하여 개인 메소드를 얻습니다.
PHP 클로저, 발전기 및 반사 기술의 기본 원리를 깊이 이해함으로써, 우리는이를 더 잘 사용하고 실제 개발에서 유연성을 완전히 제공 할 수 있습니다. 동시에, 우리는 또한 PHP의 기본 구현 및 내부 메커니즘에 대한 더 깊은 이해를 가지고 있으며, 이는 PHP 언어의 특성과 그 뒤에있는 원칙에 대한 이해에 큰 의미가 있습니다.