fightbulc/php_curl

PHP CURL对象化实现。

1.0.0 2012-10-22 00:29 UTC

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参数和魔法方法处理,还是所有方法都明明白白地呈现,两种方式都没有区别,我认为如果所有方法都明明白白地呈现,那么关于可用的方法就不会有任何混淆。