fightbulc / php_curl
PHP CURL对象化实现。
Requires
- php: >=5.3.3
This package is auto-updated.
Last update: 2024-09-21 00:14:19 UTC
README
PHP_CURL是PHP函数式CURL接口的对象化实现。
基本用法
由于PHP_CURL支持方法链,因此使用静态init
方法来生成CURL对象实例(类似于curl_init
)。
<?php
$curl = CURL::init("http://reddit.com/r/php/.json");
?>
然后我们可以设置一些CURL选项
<?php
$curl = CURL::init("http://www.reddit.com/r/php/.json")
->setReturnTransfer(TRUE);
?>
所有set...
函数都返回当前CURL对象实例,因此您可以在执行之前设置尽可能多的选项。
<?php
$curl = CURL::init("http://www.reddit.com/r/php/.json")
->setReturnTransfer(TRUE);
$response = $curl->execute():
?>
所有函数都与CURLOPT_*选项非常相似。
与函数式cURL的比较
PHP手册中给出的函数式cURL的基本示例如下
<?php
$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
?>
我们可以使用PHP_CURL执行相同的操作
<?php
$fp = fopen("example_homepage.txt", "w");
CURL::init("http://www.example.com/")
->setFile($fp)
->setHeader(0)
->execute()
->close();
fclose($fp);
?>
在代码大小或性能方面没有太大差异,然而,PHP_CURL方法可以说是更易读、更简洁。
使用这种方法的一个主要好处是,它使我们能够利用具有自动完成的PHP编辑器,因此设置多个cURL选项应该会容易一些。
问题
目前,没有支持curl_multi...
。curl_multi...
的支持即将推出。
为什么要这样做?
我发现,在PHP中编写CURL代码是重复且繁琐的,而我一直希望能有一种快速、面向对象且易于阅读的方式来执行CURL任务。
我并不声称在这里做了什么特别的事情,也不建议在生产环境中使用。这是快速而简单的,但它对我有效。
我强烈鼓励任何形式的反馈、补丁或贡献。如果有人需求,我很乐意将这个项目向更多开发者开放。
常见问题解答
问:为什么使用CURL::init()
而不是new CURL()
?
答:如果您想利用方法链,请使用CURL::init
,因为PHP的构造函数不允许像(new Curl())>foo()
这样的操作。
但是,如果您更喜欢实例化一个对象然后使用该对象,$foo = new CURL()
的支持是允许的。两者都有效。
问:为什么不能只使用一个__call()
包装器,或者使用__get()
和__set()
?
这是真的,但是已经做出了设计决定,将所有可能的函数扩展到get...
和set...
函数。这意味着对于代码的新手来说,更清楚地看到可用的方法。更不用说具有自动完成功能的编辑器通常不足以发现魔法方法处理。
最终,无论使用PHPDoc参数和魔法方法处理,还是所有方法都明明白白地呈现,两种方式都没有区别,我认为如果所有方法都明明白白地呈现,那么关于可用的方法就不会有任何混淆。