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'
}
}
このようにして、これらの定数をどこでも再利用できます。ヘルパー、モデル、コントローラーで。そして、あなたはそれらの定数を「組み合わせる」ことができます:)