0

私は PHP には少し慣れていませんが、JAVA、C#、C++ などの厳密に型指定された言語の経験は豊富です。現在、PHP で Web ツールを作成しています。欲しいです。

私がコードでやりたいことの単純なアイデアは、PHP-IMAP を使用して取得したいくつかの電子メールを実行することです。次に、メール オブジェクト (定義したクラス) を作成し、それらを配列に入れます。ただし、コードの後半では、それらの電子メールを循環して表示します。しかし、私が問題を抱えていると推測したかもしれませんが、私は後のループで Email クラス オブジェクト メソッドを使用しようとしています。そして、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
 }

loop では、関数を呼び出すだけで、戻り値で「何も」しません。echo戻り値を画面に出力するために使用します。

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

もう1つは、オブジェクトの配列であることを確認して$orderFileEmailsください。そうしないと、このループは意図したとおりに実行されません。デバッグするには、ループの前に次のように記述しますvar_dump($orderFileEmails);

編集:別のオプションは、を使用することmagic method __toString()です。(マニュアル - http://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 に答える