ClassOne 클래스 대신 프록시 클래스 ClassOneDelegator를 사용하여 메서드를 구현하세요.
데모 코드는 다음과 같습니다.
<?php class ClassOne { function callClassOne() { print "In Class One"; } } class ClassOneDelegator { private $targets; function construct() { $this->target[] = new ClassOne(); } function call($name, $args) { foreach ($this->target as $obj) { $r = new ReflectionClass($obj); if ($method = $r->getMethod($name)) { if ($method->isPublic() && !$method->isAbstract()) { return $method->invoke($obj, $args); } } } } } $obj = new ClassOneDelegator(); $obj->callClassOne(); ?>
출력 결과:
In Class One
프록시 클래스 ClassOneDelegator가 ClassOne 클래스를 대체하여 그의 메서드를 구현하는 것을 볼 수 있습니다.
마찬가지로 다음 코드도 실행할 수 있습니다:
<?php class ClassOne { function callClassOne() { print "In Class One"; } } class ClassOneDelegator { private $targets; function add Object ($obj) { $this->target[] = $obj; } function call($name, $args) { foreach ($this->target as $obj) { $r = new ReflectionClass($obj); if ($method = $r->getMethod($name)) { if ($method->isPublic() && !$method->isAbstract()) { return $method->invoke($obj, $args); } } } } } $obj = new ClassOneDelegator(); $obj->addObject(new ClassOne()); $obj->callClassOne(); ?>
위 내용은 PHP 반사 메커니즘 코드 구현 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!