PHP类问题

时间:2014-06-23 18:58:40

标签: php class

您好我想知道有人可以帮助解释并提供解决此问题的方法。我开始学习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>";

4 个答案:

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