QueryList 如何获取多个实例?
发布于 作者:苏南大叔 来源:程序如此灵动~
当在一个php
文件中,出现了两个querylist
的时候,可能就存在着一定的冲突风险了。本文中,苏南大叔主要描述的就是:如何获取querylist
的单一实例。大家如何使用phpquery
的时候,也一定要注意这一点。和普通的php
类库的概念是有所区别的。phpquery
和querylist
在实例处理这方面,是很奇怪的。大家需要仔细想清楚。
静态方法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
抓取数据的经验文章,请点击苏南大叔的博客链接。


