我可以在 PHP 类上定义 CONST 吗?
我在某些类上定义了几个 CONST,并且想要获取它们的列表。例如:
class Profile {
const LABEL_FIRST_NAME = "First Name";
const LABEL_LAST_NAME = "Last Name";
const LABEL_COMPANY_NAME = "Company";
}
有没有办法获取 Profile
类中定义的 CONST 列表?据我所知,最接近的选项(get_define_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')
I have several CONST's defined on some classes, and want to get a list of them. For example:
class Profile {
const LABEL_FIRST_NAME = "First Name";
const LABEL_LAST_NAME = "Last Name";
const LABEL_COMPANY_NAME = "Company";
}
Is there any way to get a list of the CONST's defined on the Profile
class? As far as I can tell, the closest option(get_defined_constants()
) won't do the trick.
What I actually need is a list of the constant names - something like this:
array('LABEL_FIRST_NAME',
'LABEL_LAST_NAME',
'LABEL_COMPANY_NAME')
Or:
array('Profile::LABEL_FIRST_NAME',
'Profile::LABEL_LAST_NAME',
'Profile::LABEL_COMPANY_NAME')
Or even:
array('Profile::LABEL_FIRST_NAME'=>'First Name',
'Profile::LABEL_LAST_NAME'=>'Last Name',
'Profile::LABEL_COMPANY_NAME'=>'Company')
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
使用 ReflectionClass 和
getConstants()
给出了准确的结果你想要什么:输出:
Using ReflectionClass and
getConstants()
gives exactly what you want:Output:
在类内部有一个方法来返回它自己的常量是很方便的。
你可以这样做:
It is handy to have a method inside the class to return its own constants.
You can do this way:
具有静态方法的特征 - 救援
看起来这是一个使用具有静态函数的特征来扩展类功能的好地方。 Traits 还允许我们在任何其他类中实现此功能,而无需一遍又一遍地重写相同的代码(保持 DRY)。
在 Profile 类中使用我们的自定义“ConstantExport”特征。对需要此功能的每个类执行此操作。
使用示例
输出:
Trait with static method - to the rescue
Looks like it is a nice place to use Traits with a static function to extend class functionality. Traits will also let us implement this functionality in any other class without rewriting the same code over and over again (stay DRY).
Use our custom 'ConstantExport' Trait with in Profile class. Do it for every class that you need this functionality.
USE EXAMPLE
OUTPUTS:
是的,您使用 反射 。查看 That 的输出
应该会让您了解您将要查看的内容。
Yeah, you use reflection. Look at the output of
That should give you the idea of what you'll be looking at.
为什么不首先将它们作为数组放入类变量中呢?使循环更容易。
Why not put them in a class variable as an array to begin with? Makes it easier to loop thru.
最终有了命名空间:
Eventually with namespaces:
您可以使用 Reflection 来实现此目的。请注意,如果您经常这样做,您可能需要查看缓存结果。
输出:
You can use Reflection for this. Note that if you are doing this a lot you may want to looking at caching the result.
Output:
这个
This
使用token_get_all()。即:
输出:
Use token_get_all(). Namely:
Output:
在 PHP5 中,您可以使用反射:(手动参考)
In PHP5 you can use Reflection: (manual reference)
根据 PHP 文档注释,如果您能够使用 ReflectionClass (PHP 5):
来源在这里。
Per the PHP docs comments, if you're able to use the ReflectionClass (PHP 5):
Source is here.