类常量
可以把在当前类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用美元符号 $
。常量的值必须是一个常数。可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self
, parent
或 static
)。
<?php
define('QUX', tmpfile());
class Foo
{
/**
* Just a test constant.
*
* @var int
*/
public const FOO = 2 + 3;
/**
* Just a test constant.
*
* @var string
*/
public const BAR = <<<EOT
bar
EOT;
/**
* Just a test constant.
*
* @var array
*/
public const BAZ = [true, false];
/**
* Just a test constant.
*
* @var resource
*/
public const QUX = QUX;
}
var_dump(Foo::FOO); // int(5)
$foo = new Foo();
var_dump($foo::FOO); // int(5)
$foo = 'Foo';
var_dump($foo::BAR); // string(3) "bar"
$foo = 'Foo';
$foo = new $foo;
var_dump($foo::BAZ); // array(2) { [0]=> bool(true) [1]=> bool(false) }
$foo = new Foo();
$foo = new $foo;
var_dump($foo::QUX); // resource(4) of type (stream)
类常量与常量不同的是,类常量可以被子类重写。
<?php
class Foo
{
/**
* Just a test constant.
*
* @var string
*/
public const CONSTANT = 'foo';
}
class Bar extends Foo
{
/**
* Override the parent constant.
*
* @var string
*/
public const CONSTANT = 'bar';
}
class Baz extends Foo
{
/**
* Override the parent constant.
*
* @var string
*/
public const CONSTANT = 'baz';
}
var_dump(Foo::CONSTANT); // string(3) "foo"
var_dump(Bar::CONSTANT); // string(3) "bar"
var_dump(Baz::CONSTANT); // string(3) "baz"