类常量

可以把在当前类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用美元符号 $ 。常量的值必须是一个常数。可以用一个变量来动态调用类。但该变量的值不能为关键字(如 selfparentstatic )。

<?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"

results matching ""

    No results matching ""