PHP – 类常量(Class Constants)


PHP 允许将类中的标识符定义为具有常量值的“类常量(Class Constants)”,该常量在每个类的基础上保持不变。为了与类中的变量或属性区分开来,常量的名称不以通常的 “$” 符号为前缀,而是使用 “const” 限定符定义。

请注意,PHP 程序也可以使用 define() 函数创建全局常量。

常量的默认可见性为 public,但定义中可能会使用其他修饰符。常量的值必须是表达式,而不是变量,也不是函数调用/属性。常量的值是使用范围解析运算符通过类名访问的。不过,在方法中,它可以通过 self 变量来引用。


class SomeClass {
   const CONSTANT = 'constant value';
}
echo SomeClass::CONSTANT;

注意:常量名称区分大小写。通常,常量的名称为大写。

示例

此示例显示了如何定义和访问 类常量 -


<?php
   class square {
      const PI=M_PI;
      var $side=5;
      function area() {
         $area=$this->side**2*self::PI;
         return $area;
      }
   }
   $s1=new square();
   echo "PI=". square::PI . "\n";
   echo "area=" . $s1->area();
?>

将产生以下输出 -

PI=3.1415926535898
area=78.539816339745

类常量作为表达式

在此示例中,为类常量分配了一个表达式 -


<?php
   const X = 22;
   const Y=7;

   class square {
      const PI=X/Y;
      var $side=5;
      function area() {
         $area=$this->side**2*self::PI;
         return $area;
      }
   }
   $s1=new square();
   echo "PI=". square::PI . "\n";
   echo "area=" . $s1->area();
?>

将产生以下输出 -

PI=3.1428571428571
area=78.571428571429

类常量可见性修饰符

请看下面的例子 -


<?php
   class example {
      const X=10;
      private const Y=20;
   }
   $s1=new example();
   echo "public=". example::X. "\n";
   echo "private=" . $s1->Y ."\n";
   echo "private=" . example::Y ."\n";
?>

将产生以下输出 -

public=10
PHP Notice:  Undefined property: example::$Y in  line 11

private=
PHP Fatal error:  Uncaught Error: Cannot access private const example::Y