2009-04-14 4 views
0

私はCOOKIEの影響を与えるのコードを変更していないと、今私は次の取得:未定義の定数COOKIE_LOGINのPHP: "定義されていない定数COOKIE_LOGINの使用"を取得するにはどうすればよいですか?

使用 - 仮定「COOKIE_LOGIN」

//Destroy Cookie 
if (isset($_COOKIE[COOKIE_LOGIN]) && !empty($_COOKIE[COOKIE_LOGIN])) 
    setcookie(COOKIE_LOGIN,$objUserSerialized,time() - 86400); 

私はわからないんだけど何I実際にこれを変更するには、まず何が始まるのか分からず、問題を追跡できないので、これを変更する必要があります。

ありがとうございました。

+0

も参照してください[このエラーメッセージの原因についての標準的な回答での私の試み](http://stackoverflow.com/questions/2941169/what-does-the-php-error-message-notice-use-of-未定義 - 定数 - 平均/ 8025500#8025500)。 –

答えて

8

あなたは引用符で配列のキーを囲む必要があります。

if (isset($_COOKIE['COOKIE_LOGIN']) && !empty($_COOKIE['COOKIE_LOGIN'])) 
    setcookie('COOKIE_LOGIN',$objUserSerialized,time() - 86400); 

PHPは文字列に、未知のリテラルを変換し、警告をスローします。あなたのphp.iniにはおそらく、警告を表示しないレベルのエラーがありましたが、誰かがそれを更新した可能性があります。どちらの場合でも、この場合、PHPの動作の有利性を取ることは悪い習慣です。

詳細については、the php documentationをチェックアウト:

は常に文字列リテラル配列インデックスの周りに引用符を使用しています。たとえば、$ foo ['bar']は正しいですが、$ foo [bar]は正しくありません。

これは間違っていますが、機能します。その理由は、このコードには文字列( 'bar' - 引用符があること)ではなく、未定義の定数(bar)があるからです。 PHPは、残念ながらそのようなコードでは同じ名前を持つ定数を将来定義することがあります。これは、PHPが自動的に裸の文字列(既知のシンボルに対応しない引用符で囲まれていない文字列)を裸の文字列を含む文字列に変換するために機能します。たとえば、barという名前の定数が定義されていない場合、PHPは文字列 'bar'を置き換えて使用します。 COOKIE_LOGINはあなたが定義されていることを、実際の定数がある場合を除き

1

あなたはエラーなし$_COOKIE[COOKIE_LOGIN]を言うことができない、例えば:

$ary[example] = 5; 
echo $ary[example]; 

define("COOKIE_LOGIN", 5); 

一部の人々は、彼らが次のようなコードを記述します習慣を持っています

"example"(文字列として)が配列キーと仮定します。 PHPは過去に、エラー報告を無効にした場合、この動作を免除しています。しかし、それは間違っています。 COOKIE_LOGINを定数として明示的に定義していない限り、$_COOKIE["COOKIE_LOGIN"]を使用する必要があります。

関連する問題