我正在学习PHP OOP,我正在尝试一些示例。此示例运行,但是其输出是意外的:
Class.php:
class Member
{
public $username = "Default";
private $prop1 = "I'm a class property!";
private $loggedIn = false;
public function login() {
$this->loggedIn = true;
}
public function logout() {
$this->loggedIn = false;
}
public function isLoggedIn() {
return $this->loggedIn;
}
public function isLoggedIn2() {
if ($this->loggedIn == 1){
echo "connected";
} else {echo "not connected";}
}
}
?>
index.php:
$member = new Member;
$member -> username = "FRED";
echo $member->username . " is " . ( $member->isLoggedIn() ? "logged in" : "logged out " ) . ($member->isLoggedIn2()) . " test " . "<br>";
预期输出:
FRED已注销测试未连接
实际输出:
未连接 FRED注销测试
为什么index.php在开头而不是结尾处写入isLoggedIn2()
的结果?
public function isLoggedIn2() {
if ($this->loggedIn == 1){
echo "connected";
} else {echo "not connected";}
}
您echo
删除,因此每当调用该函数时都会打印此内容。相反,您应该像在其他方法中一样使用return
。
public function isLoggedIn2() {
if ($this->loggedIn)
return "connected";
else
return "not connected";
}
为什么打印出来的样子?您在这里有一个非常复杂的声明:
echo $member->username . " is " .
( $member->isLoggedIn() ? "logged in" : "logged out " ) .
$member->isLoggedIn2() . " test " . "<br>";
为了实际打印此内容,PHP首先需要知道要打印的内容。 $member->username
和字符串(is,test等)是已知的,因此无需担心。
但是每个方法都需要调用,以了解其返回值。如果您使用常规return
,则无需担心,因为您可以将其放置在需要的位置。但是,由于您已在方法内部将其echo
删除,因此只要调用该方法,它就会被打印出来。
所以这里发生的事情是PHP调用了每个方法,并尝试了after来打印它。这就是为什么在所有其他内容之前先打印“ 未连接”的原因。
在表达式中使用的函数应使用return
,而不是echo
。问题在于,正在计算isLoggedIn2
的参数列表时echo
函数正在回显其消息。更改为:
public function isLoggedIn2() {
if ($this->loggedIn == 1){
return true;
} else {return false;}
}
$member = new Member;
$member->username = "FRED";
$member->login(); // make login
echo $member->username . " is " . ( $member->isLoggedIn() ? "logged in" : "logged out " ) . ($member->isLoggedIn2()) . " test " . "<br>";
$member->logout(); // make logout
echo $member->username . " is " . ( $member->isLoggedIn() ? "logged in" : "logged out " ) . ($member->isLoggedIn2()) . " test " . "<br>";
尝试使用