我不认为你可以在 PHP 中定义 $statuses 那样的东西。问题是您不能使用函数的结果来定义类属性。
http://www.php.net/manual/en/language.oop5.properties.php
类成员变量称为“属性”。您可能还会看到使用“属性”或“字段”等其他术语来提及它们,但出于本参考的目的,我们将使用“属性”。它们是通过使用关键字 public、protected 或 private 之一定义的,后跟一个普通的变量声明。这个声明可能包括一个初始化,但是这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。
如果你想用翻译的标签设置属性,把它移到你的构造函数中,这意味着初始化对象;
class AppModel extends Model {
const STATUS_INACTIVE = 0;
const STATUS_ACTIVE = 1;
public $statuses;
public function __construct($id = false, $table = null, $ds = null) {
parent::__construct($id, $table, $ds);
$this->statuses = array(
self::STATUS_INACTIVE => __('Inactive'),
self::STATUS_ACTIVE => __('Active')
);
}
}
或者将其移至另一个方法,以便仅在实际使用时生成,就像这样;
public function getStatusOptions()
{
return array(
self::STATUS_INACTIVE => __('Inactive'),
self::STATUS_ACTIVE => __('Active')
);
}
另一个注意事项; 定义类常量并使其可重用而不将它们添加到 AppModel 的一个好技巧是使用接口;
interface ActiveInactive {
const STATUS_INACTIVE = 0;
const STATUS_ACTIVE = 1;
}
interface FooBar {
const HELLO = 'world';
}
class MyModel extends AppModel implements ActiveInactive, FooBar {
public function test()
{
echo self::STATUS_INACTIVE; // outputs '1'
echo self::HELLO; // outputs 'world'
}
}
class MyHelper extends Helper implements ActiveInactive, FooBar {
public function test()
{
echo self::STATUS_INACTIVE; // outputs '1'
echo self::HELLO; // outputs 'world'
}
}
这样你就可以在任何地方重复使用这些常量;在助手、模型、控制器中。你可以“组合”这些常数:)