PHP反射demo

class Person {
    /**
     * For the sake of demonstration, we"re setting this private
     */
    private $_allowDynamicAttributes = false;

    /** type=primary_autoincrement */
    protected $id = 0;

    /** type=varchar length=255 null */
    protected $name;

    /** type=text null */
    protected $biography;

    public $public;

    public function getId()
    {
        return $this->id;
    }
    public function setId($v)
    {
        $this->id = $v;
    }
    public function getName()
    {
        return $this->name;
    }
    public function setName($v='d')
    {
        echo $v;
        $this->name = $v;
    }

    protected function setName1($v1=""){
        echo "protected:".$v1;
    }
    private function setName2($v1=""){
        echo "private:".$v1;
    }
    static function setName3($v='d')
    {
        echo "static:".$v;
    }


    public function getBiography()
    {
        return $this->biography;
    }
    public function setBiography($v)
    {
        $this->biography = $v;
    }
    private function privateTest(){
        echo "privateTest";
    }
    protected function protectedTest($string){
        echo $string.'<br/>';
        echo "protectedTest";
    }
}
//ReflectionClass::export('person'); // 打印类中的信息
$class = new ReflectionClass('Person');//建立 Person这个类的反射类
$instance  = $class->newInstanceArgs( );//相当于实例化Person $properties = $class->getProperties();//获取该类所有属性信息
foreach($properties as $property) {
    echo $property->getName()."<br/>";
}
$Methods = $class->getMethods(); //获取该类的方法信息
foreach($Methods as $property) {
    echo $property->getName()."<br/>";
}
$ec = $class->getMethod('setName');//执行PersonsetName方法
$ec->invoke($instance,'ssss');     //传入参数 sss

$ec1 = $class->getMethod('setName1');//执行PersonsetName方法
$ec1->invoke($instance,'ssss');     //传入参数 sss             调用失败

$ec2 = $class->getMethod('setName2');//执行PersonsetName方法
$ec2->setAccessible(true);           //设置权限即可访问静态方法
$ec2->invoke($instance,'ssss');     //传入参数 sss             调用失败!

$ec3 = $class->getMethod('setName3');//执行PersonsetName方法
$ec3->invoke($instance,'ssss');     //传入参数 sss

ReflectionMethod::export('Person', 'protectedTest');//打印方法信息
$method = new ReflectionMethod('Person', 'protectedTest'); // 调用某个类的某个方法
echo $method->invoke(new person(), 'echo protectedTest');   //第一个参数为对象,第二个参数为方法中的参数。。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值