【问题标题】:PHP class array errorPHP类数组错误
【发布时间】:2017-12-18 03:20:00
【问题描述】:

我编写了一个查看电子邮件不同部分的类。一个功能是通过检查文件名是否存在于其属性数组中来确定每个部分是否为文件。

我的支票看起来像:

if (array_key_exists("filename",$body_part->d_parameters)) {
  // do stuff
}

但我的日志中不断出现此错误,因为在部分不是文件(标题、正文等)的情况下,没有称为“文件名”的数组键。

PHP Notice:  Undefined property: stdClass::$d_parameters in mail.php
PHP Warning:  array_key_exists() expects parameter 2 to be array, null given in mail.php

【问题讨论】:

    标签: php arrays class


    【解决方案1】:

    第一个错误是因为$body_part->d_parameters在你引用的时候不存在。

    第二个错误是因为$body_part->d_parameters 传递给array_key_exists() 时不是数组

    解决方案:在尝试将对象属性传递给函数之前使用isset()is_array()

    if ( isset($body_part->d_parameters) and is_array($body_part->d_parameters) and array_key_exists("filename",$body_part->d_parameters)) {
      // do stuff
    }
    

    【讨论】:

    • 我确实在一分钟后添加了一些文本,但可能是因为我回答了一个相对基本的 PHP 问题?
    • 别担心,我也不知道,不过我会支持它。但是使用empty,您可以编写更简洁的条件语句:sandbox.onlinephpfunctions.com/code/…
    • 我对此感到很兴奋。我决定选择if isset($body_part->d_parameters[filename])
    • 也不错!如果也有可能获得null 值,我将使用array_key_exists。此外,您可能想要使用isset($body_part->d_parameters['filename'])(添加引号)否则 PHP 正在对字符串进行常量转换,并带有警告/通知,例如“注意:使用未定义的常量文件名 - 假定为 'filename' in... i>"
    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多