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

当在一个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抓取数据的经验文章,请点击苏南大叔的博客链接。

 【源码】代码片段及相关软件点此获取

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

本站的忠实读者小伙伴,正在阅读下面这些文章:

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
欢迎指正文字或逻辑错误,将会择优在文末列出您的信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!