PHP类返回值和设置变量
我想转向OOP,并试图理解它。到目前为止,我上了第一节课。这是代码。(问题在于函数sCURL()返回值并正确访问PHP类返回值和设置变量,php,curl,Php,Curl,我想转向OOP,并试图理解它。到目前为止,我上了第一节课。这是代码。(问题在于函数sCURL()返回值并正确访问 class CURL { public $url; private $header = false; // DISPLAY HEADERS (FALSE OR TRUE) private $follow = true; // FOLLOW REDIRCETS (FALSE OR TRUE) private $useragent = "Moz
class CURL {
public $url;
private $header = false; // DISPLAY HEADERS (FALSE OR TRUE)
private $follow = true; // FOLLOW REDIRCETS (FALSE OR TRUE)
private $useragent = "Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1)"; // SET USER AGENT e.g. "Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1)"
private $referer = "http://www.google.com"; // SET REFERER e.g. http://www.google.com
private $ssl = false; // If set false (it accpets any ssl) should false
private $ctimeout = 5; // Timeout for connect in SECs when curl does next url
private $timeout = 60; // Timeout of retriving page in SECs when curl does next url
public function setHeader($header) {
$this->header = $header;
}
public function setFollow($follow) {
$this->follow = $follow;
}
public function setUseragent($useragent) {
$this->useragent = $useragent;
}
public function setReferer($referer) {
$this->referer = $referer;
}
public function setSsl($ssl) {
$this->ssl = $ssl;
}
public function setCtimeout($ctimeout) {
$this->ctimeout = $ctimeout;
}
public function setTimeout($timeout) {
$this->timeout = $timeout;
}
public function __construct($url) {
$this->url = $url;
}
public function sCURL() {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_HEADER, $this->header);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $this->follow);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, $this->useragent);
curl_setopt($ch, CURLOPT_REFERER, $this->referer);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $this->ssl);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->ctimeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
}
结果如下:
object(CURL)#1 (9) {
["url"]=>
string(23) "http://www.facebook.com"
["header:private"]=>
bool(false)
["follow:private"]=>
bool(true)
["useragent:private"]=>
string(49) "Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1)"
["referer:private"]=>
string(21) "http://www.google.com"
["ssl:private"]=>
bool(false)
["ctimeout:private"]=>
int(5)
["timeout:private"]=>
int(60)
["data"]=>
NULL
}
如您所见,“data”=NULL
然后我取代了这个和平的密码
$data = curl_exec($ch);
curl_close($ch);
return $data;
为此:
$this->data = curl_exec($ch);
curl_close($ch);
return $this->data;
现在是结果(有效):
这给了我以上的结果。这是我的问题,我只想访问“数据”的东西
如果尝试访问密钥“数据”,我会收到此错误
Fatal error: Cannot use object of type CURL as array in * on line 10
那么,如何直接访问数据(数组$data1['data'],您是否也可以更改我的类中的某些内容以使其更好?据我所知,为什么返回$data;在第一个示例类中不起作用。我搜索了又搜索,但没有找到答案。很抱歉,在我列出大量函数之前,我刚刚开始使用OOP
设置时更新
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
伪造
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
我现在可以访问数据了
$data1['data'],但问题仍然存在,最后,$data1['data']显示在上面,我得到以下信息:
Fatal error: Cannot use object of type CURL as array in * on line
我只是好奇,为什么我不能访问,如果它设置为真的,如果有人可以解释,我会很高兴
谢谢你抽出时间
及
祝大家圣诞快乐:-)对象不能在该上下文中用作数组(但可以在foreach中) 如果
数据
是公共的
,您可以这样访问它:
$data1->data
但是,数据
应该是私有的
,并且应该通过getter函数访问:
$data->getData(); //Define getData() to return $this->data
对象不能在该上下文中用作数组(但可以在foreach中) 如果
数据
是公共的
,您可以这样访问它:
$data1->data
但是,数据
应该是私有的
,并且应该通过getter函数访问:
$data->getData(); //Define getData() to return $this->data
在您的示例中:
$data1 = new Curl("http://www.facebook.com");
$data1->sCURL();
var_dump($data1['data']);
$data1是一个对象,您不能将对象用作数组(如果您定义了特定接口则除外)
你能做的就是
$data1 = new Curl("http://www.facebook.com");
$data1->sCURL();
var_dump($data1->data);
另外,将属性保留为公共通常不是一种好的做法,更好的方法是将属性设置为私有并创建一些方法来访问它,这是call getter和setter示例:
class CURL {
private $data;
...
public function getData() {
return $this->data;
}
public function setDate($data) {
$this->data = $data;
}
}
使用getter和setter可以更好地控制数据,需要注意的是,在您的示例中不需要setter
最后一点,定义所有属性通常是一个很好的做法,我认为您忘记了类中数据属性的声明。在您的示例中:
$data1 = new Curl("http://www.facebook.com");
$data1->sCURL();
var_dump($data1['data']);
$data1是一个对象,您不能将对象用作数组(如果您定义了特定接口则除外)
你能做的就是
$data1 = new Curl("http://www.facebook.com");
$data1->sCURL();
var_dump($data1->data);
另外,将属性保留为公共通常不是一种好的做法,更好的方法是将属性设置为私有并创建一些方法来访问它,这是call getter和setter示例:
class CURL {
private $data;
...
public function getData() {
return $this->data;
}
public function setDate($data) {
$this->data = $data;
}
}
使用getter和setter可以更好地控制数据,需要注意的是,在您的示例中不需要setter
最后一点,定义所有属性通常是一个很好的做法,我认为您忘记了类中数据属性的声明。您想要的是访问Curl实例的
数据属性。您可以使用->
操作符来执行此操作
$curlInstance = new Curl("http://www.facebook.com");
$curlInstance->sCURL();
var_dump($curlInstance->data);
您需要的是访问Curl实例的数据
属性。您可以使用->
操作符来完成此操作
$curlInstance = new Curl("http://www.facebook.com");
$curlInstance->sCURL();
var_dump($curlInstance->data);
谢谢你的回答,上面的答案现在起作用了:-)关于那个能手和二传手,我不知怎么搞不懂它,为什么它好,为什么它应该在里面。谢谢你的回答,上面的答案现在起作用了:-)关于那个能手和二传手,我不知怎么搞不懂它,为什么它好,为什么它应该在里面。谢谢你的权利。我在RageZ的回答中评论了关于getter和setter的事情,你可以在上面看到:)getter和setter的概念非常简单。您希望控制谁、如何以及何时访问您的属性。例如,您想计算一个变量被访问的次数,使用getter,您可以设置一个变量,并在每次调用函数时递增它。没有它,你就无法控制或节制财产。与setter相同,您无法控制是什么影响了您的属性,其中setter方法可以进行一些调整或验证,以查看所需的值是否符合程序的预期。谢谢您的权利。我在RageZ的回答中评论了关于getter和setter的事情,你可以在上面看到:)getter和setter的概念非常简单。您希望控制谁、如何以及何时访问您的属性。例如,您想计算一个变量被访问的次数,使用getter,您可以设置一个变量,并在每次调用函数时递增它。没有它,你就无法控制或节制财产。与setter相同,您无法控制是什么影响了您的属性,其中setter方法可以进行一些调整或验证,以查看所需的值是否符合程序的期望。