"이 글은 주로 __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 메서드가 없으므로 생성자의 매개변수를 가져옵니다. 🎜🎜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 중국어 웹사이트의 기타 관련 기사를 참조하세요!