2011-07-18 7 views
1

私はsession_start()と呼ばず、php.iniはsession.auto_start = 0です。

変数をエラーなしでスコープに割り当てることはできますか? Cookieは設定されていませんが、スコープはページ全体で使用可能です。私はセッションを開始していない場合、PHPはエラーを発生させる必要がありますか?

+0

他のdevsに '$ _SESSION'を直接アクセスさせたくない場合は、' ArrayAccess'を実装したクラスでオーバーロードし、書き込みアクセス時に例外をスローする必要がありますセッションはまだ開始されていません。さらに、あなたのコントロール下にある「変数」だけが設定されていることを確認することもできます。 – hakre

答えて

4

$_SESSIONはスーパーグローバルであるため、すべてのスコープで常に利用できます。

セッション自体がブラウザで初期化されていないという理由だけで、この変数が存在しないわけではありません。まだ使用するのを待っていますし、いつでも自由に保管することができますが、私が理解しておけば、それを書いても消えてしまいます。次にセッションを初期化します。

編集:two => Second

このコードの結果予想通り。

<?php 
     $_SESSION['test'] = "string"; 
     session_start(); 
     $_SESSION['two'] = "Second"; 

     foreach($_SESSION as $key => $val) 
     { 
       print $key . " => " . $val; 
       print "<br />"; 
     } 
?> 
2

彼らはCLIで定義されているが、あなたは$argcとに割り当てることができますのみ。 $_FILES$_SERVER、さらに$GLOBALSに割り当てることができます。これらはすべての変数です。PHPは新しい値を割り当てることを止めません。それは動的言語であり、変数宣言は必要ないので、変数の初期化を止めることはありません。しかし、何かを割り当てる前に、session_startを呼び出す前に$_SESSIONの値を取得しようとすると、'undefined variable' noticeが返されます。

0

セッションを開始したかどうかにかかわらず、$ _SESSIONのスーパーグローバルは常に使用できます。唯一の違いは、コード内でsession_start()を実行しない場合、または.ini設定で自動開始するセッションがない場合、$ _SESSIONに入れたものはスクリプトが終了すると失われます。

すべてのスーパーグローバルにも同じことが言えます。常に利用できます。 #_POST配列は、たとえスクリプトがGETクエリで呼び出されていても、$ _COOKIE配列があります。スクリプトをコマンドラインで呼び出しても、Webサーバーは見えません。

関連する問題