我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

当在一个php文件中,出现了两个querylist的时候,可能就存在着一定的冲突风险了。本文中,苏南大叔主要描述的就是:如何获取querylist的单一实例。大家如何使用phpquery的时候,也一定要注意这一点。和普通的php类库的概念是有所区别的。phpqueryquerylist在实例处理这方面,是很奇怪的。大家需要仔细想清楚。

苏南大叔: QueryList 如何获取多个实例? - 多实例
QueryList 如何获取多个实例?(图1-1)

静态方法getInstance()

静态方法getInstance(),用于获取QueryList单一实例。此方法获取到的是全局共享的单一QueryList实例,意味着如果涉及到想要多QueryList共存的场景,就需要通过new QueryList()的方式来获取QueryList实例。QueryList内置的所有静态方法都是调用getInstance()方法获取的QueryList实例。

也就是说,默认情况下,这个QueryList只有一个实例。那么,如果需要在一个php程序中,同时处理两个抓取逻辑的话,可能就存在着变量相互混淆的情况了。

错误的使用方式

$url1 = "https://www.baidu.com/";
$url2 = "https://www.bing.com/";
$ql1 = QueryList::get($url1);
//等价: $ql1 = QueryList::getInstance()->get($url1);
$ql2 = QueryList::get($url2);
$title1 = $ql1->find('title')->text();
$title2 = $ql2->find('title')->text();
echo $title1."\r\n".$title2;

正确的使用方式

$url1 = "https://www.baidu.com/";
$url2 = "https://www.bing.com/";
$ql1 = (new QueryList)->get($url);
$ql2 = (new QueryList)->get($url2);
$title1 = $ql1->find('title')->text();
$title2 = $ql2->find('title')->text();
print_r($title1);
print_r($title2);

说明

上述两个例子的区别是这样的:

$ql1 = QueryList::get($url1);
$ql1 = (new QueryList)->get($url);

总结

如果没用特殊的new操作,一个querylist在一个php文件中,仅仅存在着一个实例,这点上和phpquery是非常类似的。如果用到多个抓取操作,同时存在于一个php代码中,就一定要注意操作:

(new QueryList)

好,更多querylist抓取数据的经验文章,请点击苏南大叔的博客链接。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   querylist