В последнее время я привык присваивать целочисленные значения константам и просто использовать имя константы в качестве средства определения ее цели. Однако в некоторых случаях это приводило к необходимости написать функцию типа 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"