我正在学习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已注销test 未连接
未连接FRED已注销test
为什么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
和字符串(是, test等)都是已知的,所以不用担心。
但是每个方法都需要被调用,以知道它的返回值。如果您使用常规的return
,则无需担心,因为您可以将其放置在需要的位置。但是由于您在方法内部将其echo
输出,因此无论何时调用该方法,它都会被打印出来。
在表达式中使用的函数应该使用return
,而不是echo
。问题是,当计算echo
的参数列表时,isLoggedIn2
函数正在回显其消息。改为:
public function isLoggedIn2() {
if ($this->loggedIn) {
return "connected";
} else {
return "not connected";
}
}
这与OOP无关。您需要对普通函数执行相同的操作。
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>";
尝试使用
public function isLoggedIn2() {
if ($this->loggedIn == true ) {
echo "connected";
}
else {
echo "not connected";
}
}