注意:
先获取反射类
获取反射方法
<?php
header("content-type:text/html;charset=utf-8");
/*
* 反射机制练习
* 要求:
* 1.如果start方法存在,且为public,使用反射机制调用Woker方法;否则提示错误;
* 2.判断step存在,并为public,就执行;
* 3.判断stop存在,并为public,就执行;
* 4.输出Worker类的全部信息;
*/
class Worker{
public function start($worker_name){
echo $worker_name . '开始工作';
}
public function step($pro_name){
echo '<br> 开始处理' . $pro_name;
}
public function stop(){
echo '<br> 停止工作';
}
}
//获取反射类
$reflector = new ReflectionClass('Worker');
//判断start是否存在并为public,是则执行,否则提示错误
if($reflector->hasMethod('start')){
if($reflector->getMethod('start')->isPublic())
$reflector->getMethod('start')->invoke($reflector->newInstance());
//判断step方法是否存在并为public,是则执行
if($reflector->hasMethod('step')){
if($reflector->getMethod('step')->isPublic()){
$reflector->getMethod('step')->invoke($reflector->newInstance(),'老牛');
}
}
//判断stop方法是否存在并为public,是则执行
if($reflector->hasMethod('stop')){
if($reflector->getMethod('stop')->isPublic()){
$reflector->getMethod('stop')->invoke($reflector->newInstance());
}
}
echo '<pre>';
echo '类的对象:<br>';
var_dump($reflector->getProperties());
echo '类的方法:<br>';
var_dump($reflector->getMethods());
}else{
echo '不存在 start 方法';
}
?>
页面输出内容:
开始工作
开始处理老牛
停止工作
类的对象:
array(0) {
}
类的方法:
array(3) {
[0]=>
&object(ReflectionMethod)#3 (2) {
["name"]=>
string(5) "start"
["class"]=>
string(6) "Worker"
}
[1]=>
&object(ReflectionMethod)#2 (2) {
["name"]=>
string(4) "step"
["class"]=>
string(6) "Worker"
}
[2]=>
&object(ReflectionMethod)#4 (2) {
["name"]=>
string(4) "stop"
["class"]=>
string(6) "Worker"
}
}