PHP常量:优点/缺点

Wil*_*lco 8 php performance standards coding-style constants

最近我一直习惯于将整数值赋给常量,并简单地使用常量名作为识别其目的的手段.但是,在某些情况下,当需要字符串表示时,这导致需要编写类似typeToString($ const)的函数.显然这是低效和不必要的,但每隔一段时间只是一个问题.

所以我的问题是,我应该考虑其他任何权衡吗?哪种情况被认为更清洁/更符合标准?此外,大多数情况下性能差异是否可以忽略不计?

案例1 :(当不需要字符串版本时更快?)

class Foo {
    const USER_TYPE_ADMIN = 0;
    const USER_TYPE_USER = 1;
    const USER_TYPE_GUEST = 2;

    public $userType = self::USER_TYPE_ADMIN;

    public function __construct($type) {
        $this->userType = $type;
    }

    public function typeToString() {
        switch($this->userType) {
            case self::USER_TYPE_ADMIN:
                return 'admin';
                break;

            case self::USER_TYPE_USER:
                return 'user';
                break;

            case self::USER_TYPE_GUEST:
                return 'guest';
                break;

            default:
                return 'unknown';
                break;
        }
    }
}

$foo = new Foo(Foo::USER_TYPE_GUEST);
echo $foo->typeToString();
// Displays "guest"
Run Code Online (Sandbox Code Playgroud)

案例2 :(需要字符串版本时更快/更容易)

class Foo {
    const USER_TYPE_ADMIN = 'admin';
    const USER_TYPE_USER = 'user';
    const USER_TYPE_GUEST = 'guest';

    public $userType = self::USER_TYPE_ADMIN;

    public function __construct($type) {
        $this->userType = $type;
    }
}

$foo = new Foo(Foo::USER_TYPE_GUEST);
echo $foo->userType();
// Displays "guest"
Run Code Online (Sandbox Code Playgroud)

Gre*_*reg 8

除非您存储大量的性能差异,否则性能差异可以忽略不计.我会toString()更简洁地写出这个方法:

$strings = array
(
    self::USER_TYPE_ADMIN => 'admin',
    self::USER_TYPE_USER => 'user',
);

if (!isset($strings[$type]))
    return 'unknown';

return $strings[$type];
Run Code Online (Sandbox Code Playgroud)

此外,你可以使$strings阵列成为一个static.