【问题标题】:How to hide error "Trying to get property of non-object"如何隐藏错误“试图获取非对象的属性”
【发布时间】:2015-07-13 12:31:29
【问题描述】:

我有以下代码,它可以正常工作。 Twitter 好友已正确列出,但似乎显示最后一项时,错误“注意:尝试获取非对象的属性”显示 4 次。

由于代码可以正常工作,我想要一种隐藏这些错误的方法。

$connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);
$tweets6 = $connection->get("https://api.twitter.com/1.1/friends/list.json?screen_name=".$twitteruser."&count=".$notweets);
foreach ($tweets6 as $tweet)
{
    for($i = 0; $i < count($tweet); $i++)
    {
        echo $tweet[$i] -> name;
        echo "<br />";
    }
}

【问题讨论】:

  • 不,正确访问这些值不会有问题,不要试图隐藏错误并尝试解决它们,$tweet6 无论如何包含什么
  • $tweets6 是一个对象列表,它是在我的代码中定义的

标签: php loops for-loop foreach notice


【解决方案1】:

替换这个:

for($i = 0; $i < count($tweet); $i++)

有了这个:

for($i = 0; $i < count($tweet) - 1; $i++)

编辑

for($i = 0; $i < count($tweet); $i++){
    if (isset($tweet[$i]->name)) {
        echo $tweet[$i] -> name;
        echo "<br />";
    }
}

试试这个

【讨论】:

  • 我已经试过了,它消除了错误,但也消除了最后一项
  • @user2675041 我已经编辑了我的代码,所以请检查一下,希望对您有帮助
【解决方案2】:

如果对象在使用它的值之前具有某个属性,您可以添加一个检查器

if (isset($tweet[$i]->name)) {
    // process

}

【讨论】:

    【解决方案3】:

    在打印之前使用一个简单的 if 条件..

       $connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);
       $tweets6 = $connection->get("https://api.twitter.com/1.1/friends/list.json?screen_name=".$twitteruser."&count=".$notweets);
    foreach ($tweets6 as $tweet)
    {
       for($i = 0; $i < count($tweet); $i++){  
         if($tweet[$i]){
            echo $tweet[$i] -> name;
            echo "<br />";
         }
       }
    }
    

    【讨论】:

      【解决方案4】:

      如果为空则使用以防止该通知。

      $connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);
      $tweets6 = $connection->get("https://api.twitter.com/1.1/friends/list.json?screen_name=".$twitteruser."&count=".$notweets);
      foreach ($tweets6 as $tweet)
      {
          for($i = 0; $i < count($tweet); $i++)
          {
              if(empty($tweet[$i]->name)) continue;
              echo $tweet[$i]->name;
              echo "<br />";
          }
      }
      

      【讨论】:

        【解决方案5】:

        虽然接受的答案会起作用,但 PHP 有 property_exists() 函数来完成这项工作,并且会更合适。即使属性具有空值,它也会返回 true,isset() 没有。

        if (property_exists($tweets[$i], "name")) {
            ....
        }
        

        【讨论】:

          猜你喜欢
          • 2018-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-08
          • 2016-06-13
          • 2018-06-02
          • 2017-08-20
          相关资源
          最近更新 更多