PHP – 在类中定义常量

我怎样才能定义一个类中的常量,并使其只有在类上下文中调用时才可见?

….就像Foo::app()->MYCONSTANT;

(如果像MYCONSTANT一样被忽略的话)

参见类常量 :

 class MyClass { const MYCONSTANT = 'constant value'; function showConstant() { echo self::MYCONSTANT. "\n"; } } echo MyClass::MYCONSTANT. "\n"; $classname = "MyClass"; echo $classname::MYCONSTANT. "\n"; // As of PHP 5.3.0 $class = new MyClass(); $class->showConstant(); echo $class::MYCONSTANT."\n"; // As of PHP 5.3.0 

在这种情况下,自己回MYCONSTANT将引发一个关于未定义常量的注意事项,并输出常量名转换为string"MYCONSTANT"


编辑 – 也许你正在寻找的是这个静态属性/variables :

 class MyClass { private static $staticVariable = null; public static function showStaticVariable($value = null) { if ((is_null(self::$staticVariable) === true) && (isset($value) === true)) { self::$staticVariable = $value; } return self::$staticVariable; } } MyClass::showStaticVariable(); // null MyClass::showStaticVariable('constant value'); // "constant value" MyClass::showStaticVariable('other constant value?'); // "constant value" MyClass::showStaticVariable(); // "constant value" 
 class Foo { const BAR = 'baz'; } echo Foo::BAR; 

这是制作类常量的唯一方法。 这些常量通过Foo::BAR可以全局访问,但是不能通过BAR访问。

要实现像Foo::baz()->BAR这样的语法,您需要从Foo类的函数baz()返回一个具有属性 BAR 。 虽然这不是一个常数。 你定义的任何常量总是可以从任何地方全局访问,不能被限制到函数调用结果。

这是一个老问题,但现在在PHP 7.1上,您可以定义不断的可见性。

 <?php class Foo { // As of PHP 7.1.0 public const BAR = 'bar'; private const BAZ = 'baz'; } echo Foo::BAR.PHP_EOL; echo Foo::BAZ.PHP_EOL; ?> 

在PHP 7.1中输出上面的例子:

酒吧

致命错误:未捕获错误:不能访问私人const Foo :: BAZ在...

注意:从PHP 7.1.0开始,可见性修饰符被允许用于类常量。

更多信息在这里

这是一个相当古老的问题,但也许这个答案仍然可以帮助别人。

您可以通过将final关键字应用于返回预定义值的方法来模拟被限制在类范围内的公共常量,如下所示:

 class Foo { // This is a private constant final public MYCONSTANT() { return 'MYCONSTANT_VALUE'; } } 

方法的最后一个关键字可以防止扩展类重新定义方法。 您也可以将final关键字放在类声明的前面,在这种情况下关键字可以阻止类inheritance。

为了得到几乎完全是亚历克斯正在寻找下面的代码可以使用:

 final class Constants { public MYCONSTANT() { return 'MYCONSTANT_VALUE'; } } class Foo { static public app() { return new Constants(); } } 

仿真的常量值可以像这样访问:

 Foo::app()->MYCONSTANT(); 

你可以在php中定义一个类常量。 但是您的类常量也可以从任何对象实例访问。 这是PHP的function。 但是,从php7.1开始 ,您可以使用访问修饰符publicprivateprotected )来定义类常量。

解决方法是将常量定义为privateprotected ,然后通过static function使其可读。 如果从静态上下文中调用该函数,则该函数只应返回常量值。

你也可以在父类中创build这个静态函数,并简单地inheritance这个父类,使其成为默认的function。

积分: http : //dwellupper.io/post/48/defining-class-constants-in-php