1 Star 0 Fork 0

Paul / php_best_practice_code

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
1_14_reflection.php 2.05 KB
一键复制 编辑 原始数据 按行查看 历史
Paul 提交于 2017-07-14 13:14 . 1_14,获取类原型方法的访问权限
<?php
/**
* 使用反射 API 来还原类的原型
* Created by PhpStorm.
* User: Administrator
* Date: 2017/7/13
* Time: 17:42
*/
class Person4
{
public $name;
private $gender;
public function say()
{
echo $this->name . " is " . $this->gender . "\r\n";
}
public function __set($name, $value)
{
echo "Setting $name to $value \r\n";
$this->$name = $value;
}
public function __get($name)
{
if (!isset($this->$name)) {
echo '未设置';
$this->$name = '正在为你设置默认值';
}
return $this->$name;
}
protected function run($method)
{
echo $this->name . ' runned with' . $method;
}
}
// 反射获取类的原型
$obj = new ReflectionClass('Person4');
// 获取类的名称
$class_name = $obj->getName();
$methods = $properties = [];
// 获取类的所有属性
foreach ($obj->getProperties() as $value) {
$properties[$value->getName()] = $value;
}
// 获取类的所有方法
foreach ($obj->getMethods() as $value) {
$methods[$value->getName()] = $value;
}
echo "class {$class_name}\r\n{\n";
// 如果类有属性的话则进行排序
is_array($properties) && ksort($properties);
// 输出类的属性
foreach ($properties as $key => $value) {
echo "\t";
echo $value->isPublic() ? 'public' : '' , $value->isPrivate() ? 'private' : '' , $value->isProtected() ? 'protected' : '' , $value->isStatic() ? 'static' : '';
echo "\t{$key}\n";
}
echo "\n";
// 对类的方法进行排序
if (is_array($methods)) {
ksort($methods);
}
// 输出类的方法
foreach ($methods as $key => $value) {
echo "\t";
echo $value->isPublic() ? 'public' : '' , $value->isPrivate() ? 'private' : '' , $value->isProtected() ? 'protected' : '' , $value->isStatic() ? 'static' : '';
echo " function {$key}() {}\n";
}
echo "}\n";
/**
运行:
class Person4
{
private gender
public name
public function __get() {}
public function __set() {}
protected function run() {}
public function say() {}
}
*/
1
https://gitee.com/paultest/php_best_practice_code.git
git@gitee.com:paultest/php_best_practice_code.git
paultest
php_best_practice_code
php_best_practice_code
master

搜索帮助