2012-04-30 15 views
3

私はこの1つに私の髪を引っ張っています。 PHPでかなり新しいですが、これは基本的なものなので、どこに問題があるのか​​分かりません。一例として、以下のコードを使用する:PHPクラスで "const"と "define"を使用できません

class LG_Activity_Processor { 
// Activity Types 
const STATUS_DRAFT = 'draft'; 
const STATUS_PUBLISH = 'publish'; 
... 
private $STATUS_FUTURE = 'future'; 
define ("STATUS_PRIVATE" , 'private'); 

私はもともとただ、「変数が完全に定義されているような時間を実行する前に構築し、私はちょうど構文はその醜いよりもきれいだと思う「CONST」を使用することを意図していました定義する "。

PHPのお知らせ::私は、次のエラーメッセージを取得クラスの後の定数を参照するたびのconstの定義は、エラーを与えない一方で問題がある未定義の定数STATUS_PUBLISHの使用を - 「STATUS_PUBLISH仮定します'

Huh?ただ、明確にするために、ここで私は "CONST" を参照するために使用する構文です:私も試した

$core_fields ['post_status'] = STATUS_PUBLISH; 

$core_fields ['post_status'] = $this->STATUS_PUBLISH; 

ない愛を。私は絶望の状態に入り、ついには「定義」を試みました。同じ呼び出し構文ですが、上記の "STATUS_PRIVATE"のように定義構文を変更しました。このように見える定義行に致命的なエラーが発生したため、これは非常に価値がありました。

PHP Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION 

私はあきらめました。私は最終的にちょうど(STATUS_FUTUREの例のように)プライベート変数として変数を定義し、次にとして呼ば:

$core_fields ['post_status'] = $this->STATUS_PUBLISH; 
あなたはそれが私は助けることができないことを期待したいだけのように動作しますが、

感私はそれを正しい方法でやっていることを知らされました。私のコードをもう一度作る方法に関するアイデア?

+0

クラスで)(定義を使用しないでください - 'const'は何が必要です。クラスの外で 'ClassName :: CONST_NAME'を使用し、同じクラスで' self :: CONST_NAME'を使用してください。 – halfer

答えて

6

アクセスするには、LG_Activity_Processor::STATUS_DRAFTを実行する必要があります。

PHPマニュアルを見ると、明確な例が得られます。

http://php.net/manual/en/language.oop5.constants.php

+1

または、クラス自体のスコープ内で使用される場合は 'self :: STATUS_DRAFT'のみです。 –

+0

@Madmartiganこれはあなたがクラス内にいる場合にのみ利用可能です。ここでは動作しますが、フルクラス名を使用するとどこでも動作します。 –

+0

私は彼がコード '$ this-> STATUS_PUBLISH'を見てクラスの範囲内で作業していると思っていました。 –

関連する問題