전화 자식 clases '__call 방법이 존재하고, 예외를 던져하지 않을 경우
내가 해결하기 위해 노력하고 문제를 반영하기 위해 제목을 업데이트 [편집]이있다
: 내가 알 필요가 메서드가 parent::
을 통해 호출되었고 debug_backtrace
을 사용할 수있는 동안이 작업을 수행하는 더 좋은 방법이있는 것처럼 보입니다.
나는 정적 인 바인딩을 조사하고 있었지만 해결책을 짐작할만큼 충분히 이해하지 못했습니다.
문제의 방법은 __call
입니다. 따라서 더 정확하게 또는 덜 정확하게 두 가지 오류가있는 추가 매개 변수를 전달할 수 없습니다.
이 문제를 해결하려는 이유는 부모 클래스가 __call
이지만 자식은 _call
일 수도 있고 아닐 수도 있습니다. 자식이 가지고 있지 않고 부모가 호출을 전달하지 않으면 예외 또는 오류가 발생합니다. 아이가 그 방법을 가지고 있다면, 우리는 false
(우리가 이것을 처리하지 않았다)을 돌려 줄 것이고 자식 _call
방법을 계속하도록 할 것이다.
지금까지 유일한 해결책은 자식이 parent::__call
을 try/catch 블록으로 싸인하고 부모가 요청을 라우트하지 않는 경우 기본적으로 예외를 throw하도록하는 것입니다.
즉.
class Parent {
public function __call($method, $params) {
if(preg_match($this->valid, $method) {
$this->do_stuff();
// if child has a call method, it would skip on true
return true;
}
elseif(** CHILD HAS CALL METHOD **) {
// this would let the child's _call method kick in
return false;
}
else {
throw new MethodDoesNotExistException($method);
}
}
}
class Child extends Parent {
public function __call($method, $params) {
if(! parent::__call($method, $params)) {
do_stuff_here();
}
}
}
방법을 처리하지 않는 부모가 그냥 아주 잘하지 않는 것 흐름 설정 제어에 대한 예외를 사용하는 등, 더 우아한 해결책이 있는지 확인 시도하고, 작동하는 경우에 예외를 던지는 동안. 하지만 스택 트레이스를 사용하여 호출자를 파악하는 것도 마찬가지입니다.
을했다 당신은 무엇을 할 때 이해하지 못했다 후기 바인딩 사용? – arkascha