在php官方手册函数的参数一节中,指明了php默认是按值传递参数,但是有两个特殊的类型,默认是按引用传递参数的,对象和资源类型。 这是因为资源 resource 是一种特殊变量,保存了到外部资源的一个引用。 对象同理,他们本身就是对其它资源的引用。 资源类型按引用传递的证明案例(同理可证明对象也是引用传递):
<?php
class CurlTest{
private function initCurl($url=''){
$ch = null;
if($url){
$ch = curl_init($url);
}else{
$ch = curl_init();
}
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
return $ch;
}
private function setUrl($ch,$url){
curl_setopt($ch,CURLOPT_URL,$url);
}
private function exec($ch){
$res = curl_exec($ch);
return $res;
}
private function close($ch){
if($ch){
curl_close($ch);
}
}
public function test(){
// 初始化一个空curl
$ch = $this->initCurl();
// 在setUrl内部赋值CURLOPT_URL后,并没有返回$ch
// 重新赋值给test函数内部的$ch,
$this->setUrl($ch,'https://www.baidu.com');
// exec执行后真的返回了百度首页的数据,证明exec内部使用的$ch
// 是经过setUrl改变后的$ch,这就证明了$ch(资源类型)是引用传递
$res = $this->exec($ch);
$this->close($ch);
var_dump($res);
}
}
$curlTest = new CurlTest();
$curlTest->test();
|