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)
除非您存储大量的性能差异,否则性能差异可以忽略不计.我会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.