使用哪种方法来处理使用相同方法和的许多对象


Which way to use to work with many objects that use the same methods and

我有一些类,它们抓取不同的网站。他们从这些网站收集数据并返回。返回的数据总是具有相同的结构。示例

name
    => name 
address
    => address
city
    => city
phone
    => phone

现在,这些类中的每一个都扩展了另一个类,并从中获取抽象方法。这些方法用于获取我之前向您展示的数据。

现在,我想从所有的scraper中获取所有的数据。目前,我正在为每个类创建一个对象,然后调用该方法,然后再次调用一个方法,以获得数组形式的集合。

问题是,对象变量的定义、创建和方法调用占用了150行(我有30个scraper)。所以30个刮刀意味着

30 lines to create private variables
30 lines to create the objects
30 lines to call the method to get the data
30 lines to get the collection as array
30 lines to return the data to the method calling

一定有更快的方法。有吗?这真的很有帮助!创建所有这些对象的类只传递关键字。所以我不确定应该使用哪些目录。

你会用什么方法来创造这个?

使用循环。如果您在许多对象上调用相同的方法,请将方法的名称放入数组中,然后在数组上迭代。。。

$fields = array('name', 'address', 'city', ...);
foreach ($fields as $field) {
  $scraper1->$field();
  $scraper2->$field();
  ...
}

如果你的30个刮刀也在一个阵列中,你可以嵌套两个循环:

foreach ($fields as $field) {
  foreach ($scrapers as $scraper) {
    $scraper->$field();
  }
}

有一个简单的解决方案。将这些类获取到数组并循环,然后使用Get_object_vars()array_merge()TR

它应该是这样的:

$objects = array(); // objects that contain data
$data = array(); //array of data
foreach($objects as $o)
   $data = array_merge(get_object_vars($o), $data);
print_r($data);

如果您不想使用get_object_vars,您可以创建一个抽象方法,返回类中的所有字段,并在循环中使用它。