2010-04-22 12 views
0

這感覺有點亂,但我希望能夠調用靜態成員函數,但有類的行爲通常休息...

例子:

<?php 
class Email 
{ 
    private $username = 'user'; 
    private $password = 'password'; 
    private $from  = '[email protected]'; 
    public $to; 

    public function SendMsg($to, $body) 
    { 
     if (isset($this)) 
      $email &= $this; 
     else 
      $email = new Email(); 

     $email->to = $to; 

     // Rest of function... 
    } 
} 

Email::SendMsg('[email protected]'); 

如何最好在這個例子中我允許靜態函數調用嗎?

謝謝!

回答

1

所以基本上你想要的靜態方法是的 「捷徑」:

$mail = new Email(); 
$mail->to = '[email protected]'; 
$mail->body = 'this is the body'; // this property was not in your example, but assuming... 
$mail->Send(); 

也許:

// class declaration omitted ...  

static public function SendMsg($to, $body) 
{ 
    $mailobject = new self; 

    $mailobject->to = $to; 
    $mailobject->body = $body; 
    $mailobject->Send(); 
} 
+0

正是這樣!不知道爲什麼我沒有想過使用新的自我 謝謝。 – watermanio 2010-04-25 16:53:38

2

如果你想你的方法是static你不能有$this關鍵字裏面的方法。

因爲靜態方法可以在沒有創建對象實例的情況下調用,所以僞變量$ this在聲明爲靜態的方法內不可用。

PHP: Static Keyword

+0

有趣的是,它是可用的,但實際上是對調用對象的引用。嚇人,是吧? – webbiedave 2010-04-22 19:12:20

+0

這很有趣,如果我在工作中有一個PHP IDE,但我不能,我會喜歡測試它。 :( – 2010-04-22 19:13:01

+0

我知道你不能在靜態方法中訪問$ this,但我希望能夠在其他情況下也可以從類中的其他方法調用方法... – watermanio 2010-04-22 19:36:40

1

採取使SendMsg靜態函數,創建一個私有成員變量名爲$電子郵件和參考保存到新建郵件的對象