2010-05-27 56 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');