我是PHP新手,并尽力使用PHP参考指南,但我在这里显然遗漏了一些东西。这是我的工作流程:
对于#3,我认为最好的方法是将信息存储在PHP对象中,然后将其导出到数据库。如果我错了,请纠正我,并且有更好的方法来做到这一点!
这是我的代码,当我尝试分配属性时,当前返回“PHP注意:试图在/home/scriptrunner/script.php中获取非对象的属性”错误(奇怪的是,它只在我到达财产$$productName->moreImages3 = $the_html->find(".extra_images ", 2)->src;
,但这可能是一个红鲱鱼。
class Product{ //Creates an object class for products
public $name = '';
public $infoLink = '';
public $description = '';
public $mainImage = '';
public $moreImages1 = '';
public $moreImages2 = '';
public $moreImages3 = '';
public $moreImages4 = '';
public $price = '';
public $designer= '';
}
function getInfo($infoLink){ // Trawls the product pages for info
$the_content = scraperwiki::scrape($infoLink);
$the_html = str_get_html($the_content);
$productName = $the_html->find("#item_info h1", 0)->innertext;
$$productName = new Product;
$$productName->name = $productName;
$$productName->infoLink = $infoLink;
$$productName->designer = $the_html->find("#item_info h2", 0)->innertext;
$$productName->description = $the_html->find("#item_info .product-body", 0)->innertext; //Might cause issues because there are multiple <p> tags in this div
$$productName->mainImage = $the_html->find("#item_image .imagecache-product_item_default", 0)->src;
$$productName->moreImages1 = $the_html->find(".extra_images ", 0)->src;
$$productName->moreImages2 = $the_html->find(".extra_images ", 1)->src;
$$productName->moreImages3 = $the_html->find(".extra_images ", 2)->src;
$$productName->moreImages4 = $the_html->find(".extra_images ", 3)->src;
$$productName->price = $the_html->find("#price", 0)->innertext;
print_r($$productName ->name); //A test to see if it's working
}
for ($i = 0; $i<count($allLinks); ++$i){
getInfo($allLinks[$i]);
};
for
循环遍历120个链接(包含在$allLinks
中)。我在这里出错的任何想法?
编辑:作为参考,每个页面上有四个图像.extra_images
,因此我想将每个图像存储为单独的属性。
答案 0 :(得分:2)
变量名称绝不是一个好主意,尤其是批量变量。只需使用数组:
$products[$productName] = new Product;
$products[$productName]->name = $productName;
$products[$productName]->infoLink = $infoLink;
$products[$productName]->designer = $the_html->find("#item_info h2", 0)->innertext;
$products[$productName]->description = $the_html->find("#item_info .product-body", 0)->innertext; //Might cause issues because there are multiple <p> tags in this div
$products[$productName]->mainImage = $the_html->find("#item_image .imagecache-product_item_default", 0)->src;
$products[$productName]->moreImages1 = $the_html->find(".extra_images ", 0)->src;
$products[$productName]->moreImages2 = $the_html->find(".extra_images ", 1)->src;
$products[$productName]->moreImages3 = $the_html->find(".extra_images ", 2)->src;
$products[$productName]->moreImages4 = $the_html->find(".extra_images ", 3)->src;
$products[$productName]->price = $the_html->find("#price", 0)->innertext;
通过这种方式,您可以通过产品名称轻松访问产品,例如
echo $products[$productName]->name;
如果您需要,还可以遍历所有产品:
foreach($products as $product)
{
var_dump($product);
}
没有可怕的混乱。