PHP反射特性的演示

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://flandycheng.blog.51cto.com/855176/440527

关于php的反射特性的文档是极少的,为了大家方便,本人特编写下面一段演示代码,供需要者参考

newInstance ();
// 对类中所有的静态对象赋值
foreach ( $reflectionClass->getProperties ( ReflectionProperty::IS_PUBLIC + ReflectionProperty::IS_PROTECTED ) as $prop ) {
	$prop->setValue ( $reflectionClass, 'My static value is ' . $prop->getName () );
}
// 对类中所有的动态对象赋值
foreach ( $reflectionClass->getProperties ( ReflectionProperty::IS_PUBLIC + ReflectionProperty::IS_PROTECTED ) as $prop ) {
	$prop->setValue ( $pluginInstance, 'My property value is ' . $prop->getName () );
}

// 实例化两个反射方法
$reflectionMethod = $reflectionClass->getMethod ( $method_name );
$reflectionStaticMethod = $reflectionClass->getMethod ( $static_method_name );

// 输出类和类对象的内容
echo "A::good --->" . A::good . "\n";
echo 'A::$type--->' . A::$type . "\n";
print_r ( $reflectionClass );
print_r ( $pluginInstance );

// 得到某个方法中名称为a的参数
$reflectionParameter = new ReflectionParameter ( array (
		$pluginInstance,
		$method_name 
), 'a' );
// 输出该参数所在的定义的方法和是否引用传递
echo "\n\n\nParameters test declared function:::\n";
print_r ( $reflectionParameter->getDeclaringFunction () );
echo "\nParameters test is passed by reference:::";
print_r ( ($reflectionParameter->isPassedByReference () ? 1 : 0) );
echo "\n\n\n";

// 执行两个反射方法
$result1 = $reflectionStaticMethod->invokeArgs ( $reflectionClass, $params );
$result2 = $reflectionMethod->invokeArgs ( $pluginInstance, $params );

try {
$a = new ReflectionMethod('A', 'display1');
$a->invokeArgs(new A(), array('a','b','ccc'));
}
catch (ReflectionException $e){
	echo $e->getMessage();
}

运行结果:

本文出自 “张学友的悲伤” 博客,请务必保留此出处http://flandycheng.blog.51cto.com/855176/440527

发表评论

电子邮件地址不会被公开。 必填项已用*标注