Heim  >  Artikel  >  Backend-Entwicklung  >  Der PHP-Reflexionsmechanismus implementiert Code für dynamischen Proxy

Der PHP-Reflexionsmechanismus implementiert Code für dynamischen Proxy

高洛峰
高洛峰Original
2016-12-23 12:55:311349Durchsuche

Der Demonstrationscode lautet wie folgt:

<?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(); 
?>

Ausgabeergebnis:
In Klasse Eins
Es ist ersichtlich, dass die Proxy-Klasse ClassOneDelegator anstelle der ClassOne-Klasse verwendet wird, um ihn zu implementieren Verfahren.
In ähnlicher Weise kann auch der folgende Code ausgeführt werden:

<?php 
class ClassOne { 
function callClassOne() { 
print "In Class One"; 
} 
} 
class ClassOneDelegator { 
private $targets; 
function addObject($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(); 
?>

Weitere codebezogene Artikel zum PHP-Reflexionsmechanismus zur Implementierung eines dynamischen Proxys finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn