私は次のコードを実行しています:
class Foo {
private $var = 0;
function isVarSet () {
return ($this->var != 0);
}
}
...
foo = new Foo();
「未定義のプロパティ」の通知が発生します:私のPHPではfoo :: $ var(バージョン5.3.5)。
関数isVarSet()だけを書き直すと:
function isVarSet() {
if (isset($this->var))
return ($this->var != 0);
return false;
}
通知が消えます。
これはわかりません。どちらの場合も$varが設定されていますが、なぜ未定義のプロパティになるのでしょうか。この通知を防ぐためにisset()を使用する必要があるのはなぜですか?また、通知がスコープ演算子::で$ varを参照するのはなぜですか?私は静的クラスを使用していません。インスタンスfooを使用しています。$ foo-> isVarSet()は、定義済みで非静的な$varにアクセスする必要があります。
私はこれに何時間も取り組んでおり、未定義のプロパティ通知に関する他のすべての回答を読んでいますが、これは私が得られないものです。StackOverFlowマスターの皆さん、教えてください。
私のアプリケーションのコード:
<?php
class session {
private $userId = 0;
function __construct() {
session_start();
$this->setUserId();
}
public function isLoggedIn() {
//if (isset($this->userId))
return ($this->userId != 0);
//return false;
}
function getUserId() {
if (isset($this->userId))
return $this->userId;
else
return false;
}
private function setUserId() {
if (isset($_SESSION['userId'])) {
$this->userId = $_SESSION['userId'];
} else
unset($this->userId);
}
public function login($user) {
if ($user != null) {
$_SESSION['userId'] = $user->id;
$this->userId = $user->id;
}
}
public function logout() {
unset($_SESSION['userId']);
unset($this->userId);
}
}
$session = new Session();
?>
セッションクラスの呼び出しは次のように行われます。
if ($session->isLoggedIn())
redirectToLocation("../public/index.php");