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