您好我想知道有人可以帮助解释并提供解决此问题的方法。我开始学习PHP OOP并自己尝试一些例子。虽然工作我没有得到预期的结果。
期待:
FRED退出测试未连接
相反,我得到了:
未连接FRED已注销测试
即使isLoggedIn2()的结果集被附加到index.php下面的echo的末尾?
有人可以解释为什么isLoggedIn2()出现在echo的开头而不是放在我放置的那一端?还有如何修复它。
以下是代码:
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>";
答案 0 :(得分:2)
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
在方法内部编辑了它,因此无论何时调用该方法都会打印它。
所以这里发生的是PHP调用每个方法和之后尝试打印它的。这就是&#34; 未连接&#34;在其他一切之前打印出来。
答案 1 :(得分:1)
尝试使用
public function isLoggedIn2() {
if ($this->loggedIn == true ) {
echo "connected";
}
else {
echo "not connected";
}
}
答案 2 :(得分:1)
表达式中使用的函数应使用return
,而不是echo
。问题是isLoggedIn2
函数在计算echo
的参数列表时回显其消息。将其更改为:
public function isLoggedIn2() {
if ($this->loggedIn) {
return "connected";
} else {
return "not connected";
}
}
这与OOP无关。你需要用普通的功能做同样的事情。
答案 3 :(得分:1)
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>";