自定义函数中未定义的偏移量:3

时间:2020-07-31 作者:JoaMika

我将此代码用作函数的一部分:

function photo_shortcode($atts){
   extract(shortcode_atts(array(
      \'no\' => 1,
   ), $atts));

   $no     = is_numeric($no) ? (int) $no : 1;
   $images = get_field(\'fl_gallery\');
   $image  = $images[$no];
}
fl_gallery 是ACF库字段。然而,有时我会收到PHP通知:未定义的偏移量:1、2、3等。。在线$image = $images[$no];

为什么会发生这种情况,如何解决?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

你以为get_field 将始终返回图像,but what if there are no images to return?

   $images = get_field(\'fl_gallery\');
   $image  = $images[$no];
代码从不检查$images 查看它是空的还是错误值。

最重要的是,如果它返回了图像,但返回了3个图像,并且$no 是4吗?如果没有警告,您无法访问不存在的内容,you have to check first. 这就是为什么您会收到PHP警告。

例如:

if ( empty( $images ) ) {
    // no images!
}

if ( empty( $images[$no] ) ) {
    // that image doesn\'t exist
}
但是,您正在使用get_field 这是一个ACF API,而不是WordPress API。您需要参考ACF文档,了解该函数在遇到问题时会执行什么操作,以及如何处理错误。它可能根本不会返回数组,但会返回最终的HTML。

您还需要添加更多验证。例如[photo_shortcode no=9000][photo_shortcodo no="-1"][photo_shortcode no="0.5"] 都是数字,将生成这些PHP警告

旁注:extract 降低安全性,使代码无法被机器和工具读取,并可能意外覆盖变量,从而导致安全漏洞和bug。Never use it.