为了账号安全,请及时绑定邮箱和手机立即绑定

我可以在PHP类上获取CONST的定义吗?

我可以在PHP类上获取CONST的定义吗?

PHP
慕森卡 2019-10-17 14:09:33
我在某些类上定义了几个CONST,并希望获得它们的列表。例如:class Profile {    const LABEL_FIRST_NAME = "First Name";    const LABEL_LAST_NAME = "Last Name";    const LABEL_COMPANY_NAME = "Company";}有什么方法可以获取在Profile类中定义的CONST的列表吗?据我所知,最接近的option(get_defined_constants())无法解决问题。我真正需要的是常量名称列表-像这样:array('LABEL_FIRST_NAME',    'LABEL_LAST_NAME',    'LABEL_COMPANY_NAME')要么:array('Profile::LABEL_FIRST_NAME',     'Profile::LABEL_LAST_NAME',    'Profile::LABEL_COMPANY_NAME')甚至:array('Profile::LABEL_FIRST_NAME'=>'First Name',     'Profile::LABEL_LAST_NAME'=>'Last Name',    'Profile::LABEL_COMPANY_NAME'=>'Company')
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

您可以为此使用反射。请注意,如果您经常这样做,则可能需要查看缓存结果。


<?php

class Profile {

    const LABEL_FIRST_NAME = "First Name";

    const LABEL_LAST_NAME = "Last Name";

    const LABEL_COMPANY_NAME = "Company";

}



$refl = new ReflectionClass('Profile');

print_r($refl->getConstants());

输出:


Array

(

    'LABEL_FIRST_NAME' => 'First Name',

    'LABEL_LAST_NAME' => 'Last Name',

    'LABEL_COMPANY_NAME' => 'Company'

)


查看完整回答
反对 回复 2019-10-17
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

使用token_get_all()。即:


<?php

header('Content-Type: text/plain');


$file = file_get_contents('Profile.php');

$tokens = token_get_all($file);


$const = false;

$name = '';

$constants = array();

foreach ($tokens as $token) {

    if (is_array($token)) {

        if ($token[0] != T_WHITESPACE) {

            if ($token[0] == T_CONST && $token[1] == 'const') {

                $const = true;

                $name = '';

            } else if ($token[0] == T_STRING && $const) {

                $const = false;

                $name = $token[1];

            } else if ($token[0] == T_CONSTANT_ENCAPSED_STRING && $name) {

                $constants[$name] = $token[1];

                $name = '';

            }

        }

    } else if ($token != '=') {

        $const = false;

        $name = '';

    }

}


foreach ($constants as $constant => $value) {

    echo "$constant = $value\n";

}

?>

输出:


LABEL_FIRST_NAME = "First Name"

LABEL_LAST_NAME = "Last Name"

LABEL_COMPANY_NAME = "Company"


查看完整回答
反对 回复 2019-10-17
?
森栏

TA贡献1810条经验 获得超5个赞

使用ReflectionClass并getConstants()给出您想要的:


<?php

class Cl {

    const AAA = 1;

    const BBB = 2;

}

$r = new ReflectionClass('Cl');

print_r($r->getConstants());

输出:


Array

(

    [AAA] => 1

    [BBB] => 2

)


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 927 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信