上一篇:20070928-如果我走了(2019-10-31 21:48:26)
文章大纲

php反射

2019-11-01 12:32:41
<?php
//php反射库函数的实践
//php反射函数的使用
/**
* Class Student
*/
Class Student
{
private $name;
private $age;
private $idno;

const ROLE_NAME = 'student';

/**
* Student constructor.
* @param $name comment:姓名 type:string
* @param $age comment:年龄 type:int
* @param $idno comment:学号 type:string
*/
function __construct($name, $age, $idno){
$this->name = $name;
$this->age = $age;
$this->idno = $idno;
}

public function showInfo(){
echo "idno:".$this->idno."<br>";
echo "age:".$this->age."<br>";
echo "name:".$this->name."<br>";
}
}

echo "<h3>----------- ReflectionObject实例化 -----------</h3>";
$obj = new ReflectionObject(new Student("ZhaiCoder", 30, "20190876"));
echo '<pre>$obj = new ReflectionObject(new Student("ZhaiCoder", 30, "20190876")); //实例化反射类<br>var_dump($obj->getName()); //获取类名</pre>';
var_dump($obj->getName());

var_dump($obj->getDocComment());

var_dump($obj->getFileName());
var_dump($obj->getEndLine());

echo "<h3>----------- 构造方法/函数 -----------</h3>";
echo '<pre>var_dump($obj->getConstructor()); //获取构造函数</pre>';
var_dump($obj->getConstructor());

echo "<h3>----------- const常量 -----------</h3>";
echo '<pre>var_dump($obj->getConstants()); //获取类中所有常量</pre>';
var_dump($obj->getConstants());

echo '<pre>var_dump($obj->getConstant("ROLE_NAME")); //获取类中指定常量的值</pre>';
var_dump($obj->getConstant("ROLE_NAME"));

echo '<pre>var_dump($obj->hasConstant("ROLE_NAME")); //判断是否包含常量<br>var_dump($obj->hasConstant("PREFIX"));</pre>';
var_dump($obj->hasConstant("ROLE_NAME"));
var_dump($obj->hasConstant("PREFIX"));


echo "<h3>----------- 属性 -----------</h3>";
echo '<pre>var_dump($obj->getProperties()); //获取类中所有属性</pre>';
var_dump($obj->getProperties());

echo '<pre>var_dump($obj->getProperty("age")); //获取类中指定属性的值</pre>';
var_dump($obj->getProperty("age"));

echo '<pre>var_dump($obj->hasProperty("age")); //判断类是否包含指定属性<br>var_dump($obj->hasProperty("sex"));</pre>';
var_dump($obj->hasProperty("age"));
var_dump($obj->hasProperty("sex"));

echo "<h3>----------- 方法(注意构造函数与大小写) -----------</h3>";
echo '<pre>var_dump($obj->getMethods()); //获取类中所有方法</pre>';
var_dump($obj->getMethods());

echo '<pre>var_dump($obj->getMethod("__construct")); //获取类中指定方法</pre>';
var_dump($obj->getMethod("__construct"));

echo '<pre>var_dump($obj->hasMethod("construct")); //检验名称不完全匹配是否影响</pre>';
var_dump($obj->hasMethod("construct"));

echo '<pre>var_dump($obj->hasMethod("__construct")); </pre>';
var_dump($obj->hasMethod("__construct"));

echo '<pre>var_dump($obj->hasMethod("showinfo")); //检验大小写是否影响</pre>';
var_dump($obj->hasMethod("showinfo"));

//经时间得知,大小写不影响

echo '<pre>$str = $obj->getMethod("__construct")->getDocComment(); //获取方法的注释内容 <br></br>var_dump($str);</pre>';
$str = $obj->getMethod('__construct')->getDocComment();
var_dump($str);

echo "<h3>----------- 方法权限相关(public/protected/private) -----------</h3>";

var_dump($obj->getMethod('__construct')->isConstructor());
var_dump($obj->getMethod('__construct')->isPrivate());
var_dump($obj->getMethod('__construct')->isProtected());
//由此可检验方法默认权限属性是public
var_dump($obj->getMethod('__construct')->isPublic());

var_dump($obj->getMethod('__construct')->getDeclaringClass());
var_dump($obj->getMethod('__construct')->getModifiers());
var_dump($obj->getMethod('__construct')->export($obj->getName(), '__construct'));
上一篇:20070928-如果我走了(2019-10-31 21:48:26)
我要评论
评论列表