2012-10-16 3 views
0

저는 PHP에 약간 익숙하며 JAVA, C# 또는 C++와 같은 강력한 형식의 언어에 더 익숙합니다. 현재 PHP로 웹 도구를 작성하고 있습니다. 내가 원하는 것을하려고하는 데 문제가있다.코드에서 객체 메서드 호출하기

내가 코드에서하고 싶은 간단한 생각은 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 />'; 
    } 

어떤 아이디어

이 클래스와 내가 메서드를 호출하고있어 루프는?

+1

당신은 반환 값에 아무것도되지 않습니다. '에코'. – Jon

+0

php4를 지원하지 않습니다. 'var' 선언을 죽이고 대신'public' /'private' /'protected'를 사용하십시오. 또한 Theres를 재발 명할 이유가 없으므로'Zend_Mail' 구성 요소를 점검하십시오. – prodigitalson

답변

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()입니다. (수동 - 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; 
+0

오 마이 맙소사. 에코를 사용하는 것을 잊어 버렸습니다. 나는 당혹 스럽습니다. 완전히 멍청한 실수를 지적 해 주신 것에 대해 예의 주셔서 감사합니다. :) –

+0

괜찮습니다. 성공의 길은 실수로 가득차 있습니다 :) 행운을 빈다. –

관련 문제