php手记-根据类名获得类的定义(get_class_methods、get_class_vars...)

背景

最近在看laravel框架的源码,不知道Route是怎么定义的,找了很久都没找到,遂从网上找有什么方法可以根据类名获得类的命名空间什么的,最后找到了用get_class_methods获得Route类定义的相关方法名称,然后根据这些方法名称组合找到类的定义(Illuminate\Support\Facades\Facade),下面是在寻找方法过程中学到的知识。

类相关魔术常量

这里写图片描述

<?php
namespace sakurallj;

trait traitTest {
    function getReturnType() { echo "__TRAIT__:".__TRAIT__.PHP_EOL; }
}

class TestController
{
    use \sakurallj\traitTest;
    public function test()
    {
        echo "__LINE__:".__LINE__.PHP_EOL
            ."__FILE__:".__FILE__.PHP_EOL
            ."__FUNCTION__:".__FUNCTION__.PHP_EOL
            ."__CLASS__:".__CLASS__.PHP_EOL
            ."__METHOD__:".__METHOD__.PHP_EOL
            ."__NAMESPACE__:".__NAMESPACE__.PHP_EOL;
    }
}

$t = new  \sakurallj\TestController();
$t->test();
$t->getReturnType();

//output:
__LINE__:16
__FILE__:/home/sakurallj/personDoc/phpWorkspace/index.php
__FUNCTION__:test
__CLASS__:sakurallj\TestController
__METHOD__:sakurallj\TestController::test
__NAMESPACE__:sakurallj
__TRAIT__:sakurallj\traitTest

?>

获取类名、方法名、变量名的方法

get_class(object); //取得对象的类名
get_class_methods(class name); //取得class name 类的所有的方法名,并且组成一个数组
get_class_vars(class name); //取得class name 类的所有的变亮名,并组成一个数组

class Test
{
    private $a;
    protected $b;
    public $c;
    const d = 0;
    private  function foo()
    {
    }
    protected  function foo1()
    {
    }
    public  function name()
    {
        echo "My name is " , get_class($this) , "\n";
    }

}

$bar = new Test();
// external call
echo "Its name is " , get_class($bar) , "\n";
// internal call
$bar->name();
var_dump(get_class_methods("Test"));//只能获得public的方法 
var_dump(get_class_vars("Test"));//只能获得public的变量,不能获得const定义的变量
//output:
Its name is Test
My name is Test
array(2) {
  [0] =>
  string(4) "name"
  [1] =>
  string(5) "name1"
}
array(1) {
  'c' =>
  NULL
}

参考
http://php.net/manual/zh/language.constants.predefined.php
http://www.php.net/manual/zh/function.get-class.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值