2

isset と empty が翻訳者によってどのように解釈されるか、または翻訳者が未定義の変数をどのように扱うかを知っている人はいますか?

私の質問を拡張するために、インクルード ファイルに以下のコードがあります。

define('USER_AUTH', !empty($_SESSION['username']) && !empty($_SESSION['status'])); //user is verified
define('ACC_IS_PENDING', $_SESSION['status'] == '0');//checks to see if user status is pending which has a status of 0

USER_AUTH は、ユーザーが認証されているかどうかを簡単に確認するために使用されます。ACC_IS_PENDING は、アカウントのステータスが保留中の場合のクイックハンドとして使用されます。しかし、PHP は、コードの 2 行目の $_SESSION['status'] が定義されていないことを知らせる通知を表示します。未定義であることは知っていますが、まだ使用していません! 私がすでに知っていることを教えてください。笑

ただし、以下でコードをだますと:

define('USER_AUTH', !isempty($_SESSION['username']) && !isempty($_SESSION['status']));
define('ACC_IS_PENDING', $_SESSION['status'] == '0');

isempty() はカスタムメイドの関数で、常に FALSE を返します。それからノー通知!または、以下のコードを使用する場合:

define('USER_AUTH', notempty($_SESSION['username']) && notempty($_SESSION['status']));
define('ACC_IS_PENDING', $_SESSION['status'] == '0');

notempty() は常に TRUE を返しますが、ここでも通知はありません。

変数が 1 回テストされていることを翻訳者がチェックし、テストの結果が true の場合、翻訳者はこれを変数が定義されていると見なす、というのは正しいでしょうか?

この場合、isset と empty はどうなるでしょうか。どちらも、評価が真偽に関係なく通知をくれるようです。

define('USER_AUTH', isset($_SESSION['username']) && isset($_SESSION['status']));
define('ACC_IS_PENDING', $_SESSION['status'] == '0');

define('USER_AUTH', empty($_SESSION['username']) && empty($_SESSION['status']));
define('ACC_IS_PENDING', $_SESSION['status'] == '0');

長々とした質問で申し訳ありません。これは些細なことのように思えますが、通知を受けずに定数をすばやく定義できると便利です。このような些細な作業の説明やより良い解決策の助けをいただければ幸いです。

4

2 に答える 2