最近我有一个习惯,就是给常量赋予整数值,并且仅使用常量名称作为标识其目的的方式。然而,在某些情况下,这导致需要编写像typeToString($const)这样的函数来获得字符串表示形式。显然,这是低效和不必要的,但只是偶尔出现问题。
所以我的问题是,有没有其他需要考虑的权衡?哪种情况被认为是更干净/更符合标准的?此外,对于大多数情况,性能差异是否可忽略不计?
情况1:(当不需要字符串版本时更快?)
所以我的问题是,有没有其他需要考虑的权衡?哪种情况被认为是更干净/更符合标准的?此外,对于大多数情况,性能差异是否可忽略不计?
情况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"
案例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"