2010-05-27 75 views
1

我已經上來的問題,而我嘗試寫一些類的問題, 這裏有一個例子: 我呼籲TwitterGrub這個類,我不能把它像:在PHP的面向對象

$c = new TwitterGrub(); 

$c->twitterDisplay(); 

這裏是類本身:

<?php 
class TwitterGrub{ 


function twitterCapture($user = 'username',$password = 'pass') { 


      $ch = curl_init("https://twitter.com/statuses/user_timeline.xml"); 
      curl_setopt($ch, CURLOPT_HEADER, 1); 
      curl_setopt($ch,CURLOPT_TIMEOUT, 30); 
      curl_setopt($ch,CURLOPT_USERPWD,$user . ":" . $password); 
      curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
      curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 
      curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
      $result=curl_exec ($ch); 
      $data = strstr($result, '<?'); 

      $xml = new SimpleXMLElement($data); 

     return $xml; 

} 


function twitterDisplay($twitNum = 2){ 
    $xml = $this::twitterCapture(); 


    for($i= 0; $i<$twitNum; $i++){ 
    echo "<div class= 'curvebox'>".$xml->status[$i]->text."</div>"; 

    } 
} 

} 

?> 

的問題是,每次我想改變我要跳回類定義的用戶名或密碼,這讓事情不是模塊化的...而且在許多感覺錯誤的方式。 所以問題是通過對象接口將我的用戶名和密碼偶然然後用新數據調用twitterDisplay()方法的正確方法?希望這是有道理的。 在此先感謝

回答

0

class TwitterGrub 
{ 
    private $_username; 
    private $_password; 

    public function __construct($username, $password) 
    { 
     $this->_username = $username; 
     $this->_password = $password; 
    } 

    // rest of the code, use $this->_username and $this->_password 
} 

,以構建

到目前爲止所有的答案都是正確的,你應該考慮它們,但我只是w螞蟻告訴你,你已經在那裏:

你的方法twitterCapture採用作爲參數的用戶名和密碼,這樣化妝使用這種,也與這些參數定義twitterDisplay功能:

function twitterDisplay($twitNum = 2, $user='default', $passwd='default'){ 
    $xml = $this->twitterCapture($user, $passwd); 

    for($i= 0; $i<$twitNum; $i++){ 
     echo "<div class= 'curvebox'>".$xml->status[$i]->text."</div>";  
    } 
} 

那麼你可以這樣做:

$c = new TwitterGrub(); 

$c->twitterDisplay('foo', 'secret'); 
//and 
$c->twitterDisplay('bar', 'secret2'); 
+0

謝謝菲利克斯! 所有的答案都很好,但我認爲你是最優雅的方式......幹得好 – rabidmachine9 2010-05-27 10:52:40

3

我建議:

$twitter = new TwitterGrub('myUser', 'myPass'); 
echo $twitter->twitterCapture(); // etc.. 


<?php 
class TwitterGrub{ 
    private $user; 
    private $password; 

    function __construct($user, $password) { 
     $this->user = $user; 
     $this->password = $password; 
    } 

    function setUser($user) { 
     $this->user = $user; 
    } 

    // same for password 


    function twitterCapture() { 


     $ch = curl_init("https://twitter.com/statuses/user_timeline.xml"); 
     curl_setopt($ch, CURLOPT_HEADER, 1); 
     curl_setopt($ch,CURLOPT_TIMEOUT, 30); 
     curl_setopt($ch,CURLOPT_USERPWD,$this->user . ":" . $this->password); 
     curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
     curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 
     curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
     $result=curl_exec ($ch); 
     $data = strstr($result, '<?'); 

     $xml = new SimpleXMLElement($data); 

     return $xml; 
} 


function twitterDisplay($twitNum = 2){ 
    $xml = $this->twitterCapture(); // DONT USE :: here! 

    for($i= 0; $i<$twitNum; $i++){ 
     echo "<div class= 'curvebox'>".$xml->status[$i]->text."</div>";  
    } 
} 
2

存儲爲成員變量的用戶名和密碼,並將它們傳遞給構造函數:

$c = new TwitterGrub('user', 'pass');