私はsession_start()
と呼ばず、php.iniはsession.auto_start = 0
です。
変数をエラーなしでスコープに割り当てることはできますか? Cookieは設定されていませんが、スコープはページ全体で使用可能です。私はセッションを開始していない場合、PHPはエラーを発生させる必要がありますか?
私はsession_start()
と呼ばず、php.iniはsession.auto_start = 0
です。
変数をエラーなしでスコープに割り当てることはできますか? Cookieは設定されていませんが、スコープはページ全体で使用可能です。私はセッションを開始していない場合、PHPはエラーを発生させる必要がありますか?
$_SESSIONはスーパーグローバルであるため、すべてのスコープで常に利用できます。
セッション自体がブラウザで初期化されていないという理由だけで、この変数が存在しないわけではありません。まだ使用するのを待っていますし、いつでも自由に保管することができますが、私が理解しておけば、それを書いても消えてしまいます。次にセッションを初期化します。
two => Second
でこのコードの結果予想通り。
<?php
$_SESSION['test'] = "string";
session_start();
$_SESSION['two'] = "Second";
foreach($_SESSION as $key => $val)
{
print $key . " => " . $val;
print "<br />";
}
?>
彼らはCLIで定義されているが、あなたは$argc
とに割り当てることができますのみ。 $_FILES
に$_SERVER
、さらに$GLOBALS
に割り当てることができます。これらはすべての変数です。PHPは新しい値を割り当てることを止めません。それは動的言語であり、変数宣言は必要ないので、変数の初期化を止めることはありません。しかし、何かを割り当てる前に、session_start
を呼び出す前に$_SESSION
の値を取得しようとすると、'undefined variable' notice
が返されます。
セッションを開始したかどうかにかかわらず、$ _SESSIONのスーパーグローバルは常に使用できます。唯一の違いは、コード内でsession_start()
を実行しない場合、または.ini設定で自動開始するセッションがない場合、$ _SESSIONに入れたものはスクリプトが終了すると失われます。
すべてのスーパーグローバルにも同じことが言えます。常に利用できます。 #_POST配列は、たとえスクリプトがGETクエリで呼び出されていても、$ _COOKIE配列があります。スクリプトをコマンドラインで呼び出しても、Webサーバーは見えません。
他のdevsに '$ _SESSION'を直接アクセスさせたくない場合は、' ArrayAccess'を実装したクラスでオーバーロードし、書き込みアクセス時に例外をスローする必要がありますセッションはまだ開始されていません。さらに、あなたのコントロール下にある「変数」だけが設定されていることを確認することもできます。 – hakre