PHP:尝试获取非对象的属性

时间:2014-07-08 11:31:17

标签: php dom

关于这个主题有很多帖子,但我没有得到所需的答案。因此,我在这里。

我一直在注意:在我的php页面中尝试在第49行的/opt/lampp/htdocs/amit/crawlnepalstock.php 错误中获取非对象的属性。

这是我的代码

<?php

    include_once('simple_html_dom.php');

    error_reporting(E_ALL);

    $html = file_get_html('http://nepalstock.com/datanepse/index.php');

    $indexarray = array('s_no','stocksymbol', 'LTP', 'LTV', 'point_change', 'per_change', 'open','high', 'low', 'volume','prev_close');

    $stocks = array();

    $maincount = 0;
    $tables = $html->find('table[class=dataTable]');

    $str = $html->plaintext;


    $matches = array();


foreach ($tables[0]->find('tr') as $elementtr) {

    $count = 0;

    $temp = array();

    $anchor = $elementtr->children(1)->find('a',0);

    $splits = preg_split('/=/', $anchor->href); **//line 49**

    $temp['stocksymbol'] = isset($splits[1]) ? $splits[1] : null;
    $temp['fullname'] = $elementtr->children(1)->plaintext;
    $temp['no_of_trans'] = $elementtr->children(2)->plaintext;
    $temp['max_price'] = $elementtr->children(3)->plaintext;
    $temp['min_price'] = $elementtr->children(4)->plaintext;
    $temp['closing_price'] = $elementtr->children(5)->plaintext;
    $temp['total_share'] = $elementtr->children(6)->plaintext;
    $temp['amount'] = $elementtr->children(7)->plaintext;
    $temp['previous_close'] = $elementtr->children(8)->plaintext;
    $temp['difference'] = $elementtr->children(9)->plaintext;

    $stocks[] = $temp;

}


$html->clear();
unset($html);

echo '<pre>';
    print_r($stocks);
echo '</pre>';

&GT;

我没有包含simple_html_dom.php类,因为它很长。非常感谢您的意见。您可以在http://sourceforge.net/projects/simplehtmldom/files/

的情况下在线查找simple_html_dom.php文件

2 个答案:

答案 0 :(得分:0)

您正在尝试访问非对象或null对象的属性。 e.g。

    $obj = null;
    echo $boject->first_name // this will produce same error as you are getting.
    // another example may be
     $obj = array();
     echo $obj->first_name; // this will also produce same error.

在代码示例中,第49行不清楚,因此您应该在第49行检查自己的此类错误。

答案 1 :(得分:0)

之所以发生这种情况,是因为在google.com文档中找不到 td [align =“ center”] 标签。也许是在第一次编写代码时在那里。

因此,其他人关于非对象的说法是正确的,但是因为找不到HTML,所以没有对象可以使用-> plaintext方法。

从2020年12月11日起,如果将 example_basic_selector.php 的第6行中找到的URL更改为此: $ html = file_get_html('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_td_align_css');

并更改此行 echo $ html-> find('td [align =“ center”]',1)-> plaintext。 '


'; 至: echo $ html-> find('td style =“ text-align:right”',1)->纯文本。 '

';
该错误将消失,因为找到了要搜索的文本,因此该方法可以按预期工作。