>  기사  >  백엔드 개발  >  PHP는 리플렉션을 사용하여 클래스와 일부 기본 애플리케이션을 얻습니다.

PHP는 리플렉션을 사용하여 클래스와 일부 기본 애플리케이션을 얻습니다.

不言
不言원래의
2018-07-06 17:15:532082검색

이 글은 주로 PHP가 리플렉션을 통해 클래스를 얻는 방법과 몇 가지 기본 응용 프로그램을 소개합니다. 이제 특정 참조 값을 가지고 있으므로 도움이 필요한 친구들이 참조할 수 있습니다.

라라벨의 핵심 코드를 살펴보았습니다. 요즘 프레임워크 . 반사 메커니즘의 광범위한 사용을 발견했습니다. 몇 가지 리플렉션 애플리케이션을 간략하게 살펴보겠습니다

class A
{
    private $_foo = 'this is a';
    public function index()
    {
        return $this->_foo;
    }
    private function _come($param)
    {
        return 'this is come'.$param;
    }

}
$refClass = new ReflectionClass('A');//获得反射

이 리플렉션을 사용하여 A의 프라이빗 속성을 가져오겠습니다A的私有属性

$privateParams = $refClass->getDefaultProperties();
print_r($privateParams);//得到结果 Array ( [_foo] => this is a )
echo $privateParams['_foo'];//得到 this is a

这样我们就可以很轻松的获得A的私有属性了。那么执行私有方法应该怎么操作呢。接下来我们先看执行共有方法,执行公有方法比较简单。

/****************获得类的实例*******************/
$class = $refClass->newInstance();
echo $class->index();

这样就可以调用公有的方法了。下面看执行私有方法

/****************获取A的方法*******************/
$refHasClass = $refClass->getMethods();
print_r($refHasClass);
/***
 * Array ( [0] => ReflectionMethod Object ( [name] => index [class] => A )
 * [1] => ReflectionMethod Object ( [name] => _come [class] => A ) )
 */
$come = $refClass->getMethod('_come');
$come->setAccessible(true);
echo $come->invoke($class,'this is param');
// this is athis is comethis is param

先通过getMethod()就可以获取到come方法,然后设置come方法的可访问性。最后通过invokerrreee

이 방법으로 A의 프라이빗 속성을 쉽게 얻을 수 있습니다. 재산. 그렇다면 Private 메소드를 실행하려면 어떻게 해야 할까요? 다음으로 먼저 공개 메소드 실행을 살펴보겠습니다. 공개 메소드 실행은 비교적 간단합니다.
rrreee
이 방법으로 공개 메소드를 호출할 수 있습니다. private 메소드 실행을 살펴보겠습니다

rrreee

먼저 getMethod()를 통해 come 메소드를 가져온 후, come에 대한 접근성을 설정할 수 있습니다. 코드> 방법. 마지막으로 invoke를 통해 메소드를 실행합니다. 이 외에도 반영할 수 있는 메소드가 많기 때문에 여기서는 하나씩 다루지 않겠습니다. 관심 있는 분들은 공식 문서를 참고하세요

위 내용은 모두의 학습에 도움이 되기를 바랍니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

php7+의 php-fpm 매개변수 구성에 대한 참고 사항🎜🎜🎜

위 내용은 PHP는 리플렉션을 사용하여 클래스와 일부 기본 애플리케이션을 얻습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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