ユーザーがログインしており、特定の部門に属しているかどうかを検出する if ステートメントがあります。それは本当にとても簡単です。
ログインまたは NULL の場合に User オブジェクトを返す Permissions.php クラスがあります。
protected $user = NULL;
...
public static function instance() {
if(!self::$instance) {
self::$instance = new Permissions();
}
return self::$instance;
}
...
public function get_user() {
return $this->user;
}
次に、自分がどの部門にいるかを返す関数を持つ user.php クラスがあります。
public function is_manager() {
return $this->is_manager;
}
だから私は次のことができるはずです:
if(Permissions::instance()->get_user()->is_manager())
しかし、もちろん、NULL オブジェクトに関する警告がスローされる可能性があるため、次のことができると考えました。
if( ( ! is_null( Permissions::instance()->get_user() ) ) &&
( Permissions::instance()->get_user()->is_manager() ))
null をチェックする必要があり、そうでない場合は if ステートメントの残りの半分を評価する必要がありますが、何らかの理由で PHP はすべてを評価し、まだ NULL オブジェクトについて文句を言います (ユーザーがログインしていない場合)。
そのため、if ステートメントをネストされた if ステートメントに分割しましたが、PHP は引き続き null オブジェクトについて不平を言い、is_null メソッドが期待どおりに機能していないと思いました。
これは最終的に機能しました:
if (Permissions::instance()->get_user() != NULL) {
if(Permissions::instance()->get_user()->is_manager()){
...
}
}
私の質問は、is_null 関数を使用したコードが機能しないのはなぜですか?
さらにテストを行ったところ、素晴らしいコメントのおかげで、get_user()
NULL を返していなかったことがわかりましたが、(bool)false
(var_dump から)。なぜこの奇妙な行動が見られるのでしょうか? 私のクラスは明らかに上部に NULL を設定し、関数は変数を false として返しますか?