您的位置:首页 > 编程语言 > PHP开发

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

2015-11-25 11:09 609 查看

背景

最近在看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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php