我在尝试写一些课时遇到了问题, 这是一个例子: 我有这个名为TwitterGrub的课程,我不能这样称呼它:
$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 :(得分: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>";
}
}
答案 1 :(得分:2)
将用户和密码存储为成员变量,并将它们传递给构造函数:
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
}
构造于:
$c = new TwitterGrub('user', 'pass');
答案 2 :(得分:0)
到目前为止所有答案都是正确的,您应该考虑它们,但我只想告诉您,您已经在那里:
您的方法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');