0

我对 PHP 有点陌生,而且我对 JAVA、C# 或 C++ 等强类型语言更有经验。我目前正在用 PHP 编写一个 Web 工具,但在尝试做我想做的事情时遇到了问题想。

我想在代码中做什么的简单想法是通过我使用 PHP-IMAP 获取的一些电子邮件来运行的。然后我创建电子邮件对象(我定义的一个类),并将它们放入一个数组中。但是,稍后在代码中,我会循环浏览这些电子邮件以显示它们。但是,正如您可能已经猜到的那样,我会遇到问题,我尝试在后面的循环中使用电子邮件类对象方法——而且我很确定 PHP 不知道数组中的变量恰好是电子邮件类对象!

我写了一个 toString 方法,我想在循环中调用它。虽然我不需要为此工具的最终版本执行此操作,但我想找出我缺少的内容。

这是我调用该方法的类和循环:

 include 'imap_email_interface.php';


 class ImapEmail implements imap_email_interface
 {
    // Email data
    var $msgno;
    var $to;
    var $from;
    var $subject;
    var $body;
    var $attachment;

    // Email behavior
    /* PHP 4 ~ legacy constructor */
    public function ImapEmail($message_number)
    {
        $this->__construct();
        $this->msgno = $message_number;
    }

    /* PHP 5 Constructor */
    public function __construct($message_number)    
    {   $this->msgno = $message_number; }

    public function send($send_to)
    {
        // Not Yet Needed! Seriously!
    }

    public function setHeaderDirectly($TO, $FROM, $SUBJECT)
    {   $this->to = $TO;    $this->from = $FROM;    $this->subject = $SUBJECT;  }

    public function setHeaderIndirectly($HEADER)
    {
        if (isset($HEADER->to[0]->personal))
            $this->to = '"'.$HEADER->to[0]->personal.'", '.$HEADER->to[0]->mailbox.'@'.$HEADER->to[0]->host;
        else
            $this->to = $HEADER->to[0]->mailbox.'@'.$HEADER->to[0]->host;
        $this->from = '"'.$HEADER->from[0]->personal.'", '.$HEADER->from[0]->mailbox.'@'.$HEADER->from[0]->host;
        $this->subject = $HEADER->subject;
    }

    public function setBody($BODY)
    {   $this->body = $BODY;    }

    public function setAttachment($ATTCH)
    {
        $this->attachment = $ATTCH;
    }

     public function toString()
     {
        $str = '[TO]: ' . $this->to . '<br />' . '[FROM]: ' . $this->from . '<br />' . '[SUBJECT]: ' . $this->subject . '<br />';
        $str .= '[Attachment]: '.$this->attachment.'<br />';

        return $str;
     }
 }
?>

循环:

foreach ($orderFileEmails as $x)
    {
        $x->toString();
        echo '<br /><br />';
    }

有任何想法吗?

4

1 回答 1

2

如您的代码中所写,您的toString函数返回$str表示电子邮件内容的变量。

 public function toString()
 {
       $str = '[TO]: ' . $this->to . '<br />' . '[FROM]: ' . $this->from . '<br />' . '[SUBJECT]: ' . $this->subject . '<br />';
       $str .= '[Attachment]: '.$this->attachment.'<br />';

      return $str; //You RETURN the string
 }

在您的循环中,您只是调用函数并对返回的值执行“无”操作。用于echo将其返回值打印到屏幕上。

foreach ($orderFileEmails as $x)
    {
        echo $x->toString(); //Notice the echo I've added
        echo '<br /><br />';
    }

另一件事是,确保它$orderFileEmails是一个对象数组,否则这个循环不会做你愿意做的事情。为了调试它,在循环之前写:var_dump($orderFileEmails);.

编辑:另一种选择是使用magic method __toString(). (手册 - h​​ttp: //www.php.net/manual/en/language.oop5.magic.php#object.tostring

它是这样工作的:

class ImapEmail
{
    // Your methods and properties here...

    public function __toString()
    {
      $str = '[TO]: ' . $this->to . '<br />' . '[FROM]: ' . $this->from . '<br />' . '[SUBJECT]: ' . $this->subject . '<br />';
      $str .= '[Attachment]: '.$this->attachment.'<br />';

      return $str;
    }
}

$class = new ImapEmail();
echo $class;
于 2012-10-16T22:52:46.373 回答