>PHP 프레임워크 >ThinkPHP >ThinkPHP 컨테이너 바인딩 매개변수

ThinkPHP 컨테이너 바인딩 매개변수

咔咔
咔咔원래의
2020-10-12 12:58:502044검색
"

이 글은 주로 __make 메서드가 각 메서드에서 어떻게 실행되는지 알아보는 내용이며, 이제 컨테이너에 대해 배웠으니 구성 정보를 얻기 위해 컨테이너를 사용하여 구성을 호출하는 방법을 알아보겠습니다.

"

bindParams 메소드 분석

다음으로 关于参数传递的就是一个反射类   第二个参数暂时不做说明,目前还没有遇到响应的场景。

第一个参数值$reflect

使用反射方法$reflect->getNumberOfParameters()

매개변수 전달에 대해서는 반영 클래스입니다. 두 번째 매개변수에 대해서는 아직 설명하지 않습니다.

첫 번째 매개변수 값$reflect 🎜
그림>🎜반사 방법 사용$reflect->getNumberOfParameters()리플렉션 클래스에서 해당 메소드를 가져옵니다. 매개변수의 수. 위에 따르면 __make 메소드입니다. 컨테이너 코드에서 두 가지 메소드의 매개변수 개수만 얻었습니다. 하나는 __make 메소드이고 다른 하나는 리플렉션 클래스의 생성자입니다. 🎜🎜현재 vars 변수를 전달하는 시나리오가 없으므로 당분간 공부하지 않고 이 섹션을 건너뛰겠습니다. 🎜

Code$params = $reflect->getParameters() ;는 메소드를 얻기 위해 리플렉션을 사용하는 매개변수이기도 합니다. $params = $reflect->getParameters();也是使用反射获取方法的参数。

打印出来可以看到的结果是俩组数据。

那么这这组数据是从哪里来的呢!往上翻一下,看一下$reflect这个参数是什么就明白了。

thinkApp这个反射类是没有__make方法的,所以会获取构造函数中的参数。

然后thinkLog反射类中存在__make方法,于是就会返回__make的参数,如下图。

就像类似于thinkLog这样的类,既有__make方法,也存在构造函数,就会走俩次bindParams方法,这个应该都明白,正是下图逻辑。

在接下来就是循环反射类中获取的参数。

获取参数名、和获取对应的反射类

最后将获取出来的反射类传递给getObjectParam

인쇄 시 볼 수 있는 결과는 두 가지 데이터 세트입니다. 🎜🎜그러면 이 데이터 세트는 어디서 오는 걸까요? 위로 스크롤하여 살펴보세요$reflect 이 매개변수가 무엇인지 이해하게 될 것입니다. 🎜🎜thinkApp 리플렉션 클래스에는 __make 메서드가 없으므로 생성자의 매개변수를 가져옵니다. 🎜🎜그런 다음 thinkLog 반사 클래스에 __make 메소드가 있습니다. 그러면 아래와 같이 __make의 매개변수가 반환됩니다. 🎜
/Figure>🎜thinkLog와 같은 클래스처럼 __make 메소드와 생성자를 모두 가지고 있으며 bindParams 메소드, 여러분 모두 이것을 이해해야 합니다. 이것이 바로 아래 그림의 논리입니다. 🎜🎜다음 단계는 루프 반사 클래스에서 얻은 매개변수입니다. . 🎜🎜매개변수 이름을 가져오고 해당 반사 클래스를 가져옵니다🎜🎜마지막으로 얻은 반사 클래스를 getObjectParam 메소드. 🎜

getObjectParam이 없습니다. 방법 콘텐츠의 양. getObjectParam方法中并没有多少内容。

由于$vars从头到尾都是空数组所以去除数组第一个的操作和判断是否为闭包都不会执行。

最终会在返回去执行make方法

然后make方法会直接从容器中返回这个实例

当一个反射类存在__make方法时,最终就会执行return $method->invokeArgs(null, $args);

$vars처음부터 end 빈 배열이므로 배열의 첫 번째 항목을 제거하고 클로저인지 여부를 확인하는 작업은 실행되지 않습니다.

make 메소드는 결국 반환 후에 실행됩니다 make 메소드 이 인스턴스는 컨테이너에서 직접 반환됩니다

반사 클래스가 존재합니다 __make 메소드, return $method- > 호출Args(null, $args);, 매개변수를 사용하여 리플렉션 클래스 메소드 실행

컨테이너를 사용하여 구성 클래스 호출

이제 컨테이너 소스 코드를 한 번 읽었으므로 그것을 구현하는 용기?

🎜물론 가능합니다. 여기서는 향후 검토의 편의를 위해 클래스 이름도 Container로 지정하므로 별칭을 추가할 필요는 없습니다. 하아! 🎜🎜🎜🎜🎜이제 컨테이너의 소스 코드는 거의 설명되었습니다. 나중에 Kaka는 모든 사람이 볼 수 있도록 완전한 흐름도를 만들 것입니다. 🎜

배움에 대한 끈기, 블로그에 대한 끈기, 공유에 대한 끈기는 카카가 경력 이후부터 지켜온 신념입니다. 거대한 인터넷에 올라온 카카의 글이 여러분에게 조금이나마 도움이 되기를 바랍니다. 카카, 다음 호에서 만나요

위 내용은 ThinkPHP 컨테이너 바인딩 매개변수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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