Php 列出脚本文件中的所有类和方法

Php 列出脚本文件中的所有类和方法,php,Php,我希望在选取特定脚本文件后,将所有类及其方法名称以及方法类型(public、private、protected)输出到数组中 这将用于创建权限系统,管理员可以在其中指定特定用户组可以访问的类 例如,在脚本文件test.php中,它具有以下内容: class test{ public function dostuff(){ } private function hide(){ } } 它应该给我一个这样的列表: 类别:测试 方法: 多斯塔夫(公共) 隐藏(私人)好的,这是我的建议: //

我希望在选取特定脚本文件后,将所有类及其方法名称以及方法类型(public、private、protected)输出到数组中

这将用于创建权限系统,管理员可以在其中指定特定用户组可以访问的类

例如,在脚本文件test.php中,它具有以下内容:

class test{

public function dostuff(){

}

private function hide(){

}
}
它应该给我一个这样的列表: 类别:测试 方法: 多斯塔夫(公共)
隐藏(私人)

好的,这是我的建议:

// Get new class name

$classes = get_declared_classes();
include 'your_php_file.php';
$diff = array_diff(get_declared_classes(), $classes);
$class = reset($diff);

// Get class's methods

$methods = get_class_methods($class);

// Print them out

echo "Class : ".$class;
foreach ($methods as $method) {
    echo "$method\n";
}

好的,这就是我的建议:

// Get new class name

$classes = get_declared_classes();
include 'your_php_file.php';
$diff = array_diff(get_declared_classes(), $classes);
$class = reset($diff);

// Get class's methods

$methods = get_class_methods($class);

// Print them out

echo "Class : ".$class;
foreach ($methods as $method) {
    echo "$method\n";
}




我看到的唯一方法是使用正则表达式。您可以使用
获取类方法
它将在数组中输出类XYZ的所有公共方法。是的,但这要求我首先知道类的名称。我想要一种方法来“检测”类,而不必首先从文件中知道它们的名称。您可以将级别分配给用户,例如,整数。将其存储在数据库中,在用户登录时提取。然后,您可以检查级别并显示允许的内容:输入、按钮。比如($user->level>=GUEST\u level)回显“您有权这样做”;当然,除了图形以外,你还必须检查逻辑引擎中的级别。有趣的是,我只有查看和写入设置(即允许他们添加/修改数据库内容)我看到的唯一方法就是玩正则表达式。你可以使用
get_class_methods
它将在数组中输出类XYZ的所有公共方法。是的,但这需要我首先知道类的名称。我想要一种方法来“检测”类,而不必首先从文件中知道它们的名称。您可以将级别分配给用户,例如,整数。将其存储在数据库中,在用户登录时提取。然后,您可以检查级别并显示允许的内容:输入、按钮。比如($user->level>=GUEST\u level)回显“您有权这样做”;当然,除了图形之外,你还必须检查逻辑引擎中的级别。有趣的想法是,我只有查看和写入设置(即允许他们添加/修改数据库内容)看起来很有希望。这是一种比我在这里看到的令牌方式更好的方法:@Nuvolari好吧,这很大程度上取决于你想用它做什么。我个人更喜欢这个版本(因为它要短得多,也更简单),但是-作为一个缺点-请记住,每次我们要分析脚本时,都会出现一个完整的
include
。我会一次分析10到1000+个脚本文件,并将它们的类/方法输入数据库。@Nuvolari,如果它是一次性的(即使1000多个脚本相当多),我仍然会坚持这种方法。如果它应该在某个服务器上持续运行,那么我会选择其他的。就我的。2美分…更多的是一次性或偶然的事情。看起来很有希望。这是一种比我在这里看到的令牌方式更好的方法:@Nuvolari好吧,这很大程度上取决于你想用它做什么。我个人更喜欢这个版本(因为它要短得多,也更简单),但是-作为一个缺点-请记住,每次我们要分析脚本时,都会出现一个完整的
include
。我会一次分析10到1000+个脚本文件,并将它们的类/方法输入数据库。@Nuvolari,如果它是一次性的(即使1000多个脚本相当多),我仍然会坚持这种方法。如果它应该在某个服务器上持续运行,那么我会选择其他的。只是我的.2美分…更多的是一次性的或偶然的事情。这段代码可以工作,但不考虑函数名和花括号之间的空格。例如:
public function test(){
可以工作,但是
public function test()[new line]{'不行。
这段代码可以工作,但是不考虑函数名和花括号之间的空格。例如:
public function test(){
可以工作,但是
public function test()[new line]{'不会。