>  기사  >  백엔드 개발  >  PHP 반사 동적 프록시

PHP 반사 동적 프록시

藏色散人
藏色散人앞으로
2019-09-23 09:14:093610검색

Reflection은 클래스의 내부 구조를 감지할 수 있으며 플러그인 기능을 구현하기 위한 후크 또는 동적 프록시로 사용될 수 있습니다.

Reflection 관련 API

클래스 및 객체 관련 함수

get_object_vars
get_class_methods
get_class_vars
get_class
get_parent_class
method_exists
property_exists
trait_exists

Reflection 관련 API 클래스#🎜🎜 #

reflectiontype
reflectionproperty
reflectionobject
reflectionfunction
reflectionmethod
reflectionexception
reflectionextension
reflectionparameter
reflectionfunctionabstract
reflectiongenerator
reflectionclass
reflectionclassconstant
reflectionzendextension

리플렉션 API는 더욱 강력하며 메서드 액세스 권한 등을 포함하여 이 클래스의 프로토타입을 복원할 수도 있습니다.

애플리케이션 시나리오#🎜🎜 ##🎜 🎜#하나는 객체를 디버깅하는 것이고, 다른 하나는 클래스 정보를 얻는 것입니다. 일반적으로 다음과 같은 응용 방법이 있습니다.

문서 생성에서는 이를 사용하여 클래스를 스캔합니다. 파일 및 설명 문서 생성# 🎜🎜#

MVC 및 플러그인 개발에서는 리플렉션이 일반적으로 사용됩니다. 일반적으로

을 사용하지 마십시오. 이는 클래스의 캡슐화를 파괴합니다. 리플렉션은 노출되어서는 안 되는 메서드나 속성을 강제로 노출시킬 수 있기 때문입니다.

#🎜 🎜#Example

다음은 다음을 사용하여 구현된 간단한 데이터베이스 동적 프록시입니다. 리플렉션 기능

동적 프록시를 기반으로 인터셉터 구현, 속성 메서드 추가, 클리핑 등 상상의 여지가 더 많습니다.

class Mysql
{
    function connect($db){
         echo "connecting database ${db[0]}\r\n";
    }
}
class SqlProxy
{
    private $target;
     function __construct($tar){
         $this->target[]  = new $tar();
     }
     function __call($name, $args){
             if($method = $r->getMethod($name)){
                 if($method->isPublic() && !$method->isAbstract()){
                     echo "method before record \r\n";
                     $method->invoke($obj,$args);
                     echo "method after record\r\n";
                 }
             }
         }
     }
 }
 $obj = new SqlProxy('Mysql');
 $obj->connect('member');

Others# 🎜🎜#

echo와 print는 모두 언어 구조이지만 후자는 반환 값을 갖습니다.print_r과 var_dump는 여러 유형의 데이터를 인쇄할 수 있는 일반 함수이지만 후자는 데이터 유형을 출력합니다. 전자의 두 번째 매개변수는

Recommended: 《

PHP tutorial

을 반환하도록 출력을 변경할 수 있습니다.

위 내용은 PHP 반사 동적 프록시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제