39
A
回答
33
是的,只要类本身已加载,它们就可以全局访问。据我所知,你不能修改PHP中的类常量的可访问性。
19
类常量应该有私有/受保护的选项,因为公开暴露了类的内部细节,其他类/代码可能错误地使用,认为它们可以使用,因为它们是公共的。
很高兴知道更改私有常量只会影响它定义的类。不幸的是,我们没有这个选项。
回想起当你学习对象设计时&分析......你给类方法和属性的最有限制的访问可能,然后根据需要放松它们(更难以回到另一种方式,因为其他类/代码开始使用它们,然后破坏其他代码)。
替代方法
最好的办法是只创建一个私有或受保护的变量和大写它来显示它是一个常数。你总是可以创建一个名为常量($ value_to_be_constant)的类来实现正确的魔术方法/ spl接口,以防止它被更改。
5
我知道这个问题是6岁
的PHP 7.1(目前RC1)允许指定的类常量的知名度。
class Token {
// Constants default to public
const PUBLIC_CONST = 0;
// Constants then also can have a defined visibility
private const PRIVATE_CONST = 0;
protected const PROTECTED_CONST = 0;
public const PUBLIC_CONST_TWO = 0;
//Constants can only have one visibility declaration list
private const FOO = 1, BAR = 2;
}
其他信息
2
由于php7.1,你可以用访问修饰符(public
,private
或定义你的类常量protected
)。看看下面的例子:
<?php
class superheroes{
public const kal_el = 'Superman';
protected const bruce_wayne = 'Batman'; # works php7.1 onwards
private const anthony_stark = 'Iron Man'; # works php7.1 onwards
public static function show_remaining(){
echo self::bruce_wayne, '<br />';
echo self::anthony_stark, '<br />';
}
}
echo superheroes::kal_el, '<br />';
superheroes::show_remaining();
学分:http://dwellupper.io/post/48/defining-class-constants-in-php
相关问题
- 1. C++类(公共,私有和受保护)
- 2. 公共vs受保护
- 3. 有无论如何定义公共或私人或受保护的类在PHP
- 4. javadoc所有 - 私人,公共和受保护的成员
- 5. 公共/受保护/私有继承问题
- 6. 如何确定一个方法是私有的,受保护的,内部的还是公共的?
- 7. “公共”和“私人”是类,而“保护”不是?
- 8. 与公共,私人和受保护区别
- 9. 公共私人和保护在objective-c
- 10. 公共getter,带CodeDOM的受保护setter
- 11. 什么是没有公共私有或保护声明的变量?
- 12. 将私有或受保护的方法转换为公开
- 13. PHP类中受保护/私有的重要性
- 14. 您应该在Ruby中使用私有,受保护和公共修饰符吗?
- 15. 为什么Joomla不使用私人,公共和受保护的关键字?
- 16. 公共类,但私有成员变量?
- 17. 保持API调用私有/受保护
- 18. 如何判断一个变量在PHP类中是公有还是私有?
- 19. 为什么我的PHP子类没有从父类获得公共和受保护的变量?
- 20. 受保护的和私有的方法
- 21. 受保护/公共变量与Vs. F#中的闭包#
- 22. 如何检查一个函数是公共的还是以PHP保护的
- 23. Ruby中的私有/受保护块?
- 24. TypeScript - 私有变量和受保护变量之间的区别
- 25. 公众,保护私人
- 26. PHPUnit Test如果函数/ var是公共私有的或受保护的,就会断言?
- 27. 受保护/私有继承铸造
- 28. 有关抽象类与私人,公共和受保护的构造函数的一些问题
- 29. 公立还是私人?
- 30. C++保护/公共重载
是什么力量让它们隐藏起来的原因是什么?即使它们是公开的 - 它们是只读的。 – zerkms 2010-12-22 00:21:10
常量是公开的,因为它们要描述关于类的不变事实,而不是状态或它。所以隐藏它们没有任何价值。 – StasM 2010-12-22 00:50:40
可能会在`__getStatic`的未来版本中伪造它们。一般来说,如果您在脚本语言中完全需要访问修饰符,这是值得怀疑的。 (Javascript/Python是更加面向对象的方式,不需要它们。) – mario 2010-12-22 02:14:08