为什么此PHP代码无序打印?

问题描述 投票:-2回答:4

我正在学习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()的结果?

php echo
4个回答
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和字符串(istest等)是已知的,因此无需担心。

但是每个方法都需要调用,以了解其返回值。如果您使用常规return,则无需担心,因为您可以将其放置在需要的位置。但是,由于您已在方法内部将其echo删除,因此只要调用该方法,它就会被打印出来。

所以这里发生的事情是PHP调用了每个方法,并尝试了after来打印它。这就是为什么在所有其他内容之前先打印“ 未连接”的原因。


1
投票

在表达式中使用的函数应使用return,而不是echo。问题在于,正在计算isLoggedIn2的参数列表时echo函数正在回显其消息。更改为:


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>";

1
投票

尝试使用

© www.soinside.com 2019 - 2024. All rights reserved.