最近我一直习惯于将整数值赋给常量,并简单地使用常量名作为识别其目的的手段.但是,在某些情况下,当需要字符串表示时,这导致需要编写类似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"
案例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"
Greg.. 8
除非您存储大量的性能差异,否则性能差异可以忽略不计.我会toString()
更简洁地写出这个方法:
$strings = array ( self::USER_TYPE_ADMIN => 'admin', self::USER_TYPE_USER => 'user', ); if (!isset($strings[$type])) return 'unknown'; return $strings[$type];
此外,你可以使$strings
阵列成为一个static
.
除非您存储大量的性能差异,否则性能差异可以忽略不计.我会toString()
更简洁地写出这个方法:
$strings = array ( self::USER_TYPE_ADMIN => 'admin', self::USER_TYPE_USER => 'user', ); if (!isset($strings[$type])) return 'unknown'; return $strings[$type];
此外,你可以使$strings
阵列成为一个static
.