您需要验证关于$filearray
在你使用它之前。
评论中有一些很好的建议,我认为有几个强有力的例子也可以为您提供帮助:
使用empty()
function wp_custom_attachment() {
wp_nonce_field( plugin_basename(__FILE__), \'wp_custom_attachment_nonce\' );
$html = \'<p class="description">Upload your PDF here.</p>\';
$html .= \'<input id="wp_custom_attachment" name="wp_custom_attachment" size="25" type="file" value="" />\';
$filearray = get_post_meta( get_the_ID(), \'wp_custom_attachment\', true );
if ( ! empty( $filearray[\'url\'] ) ) {
$html .= \'<div><p>Current file: \' . $filearray[\'url\'] . \'</p></div>\';
}
echo $html;
}
empty()
很好,因为它隐式地工作如下
isset
, 如果没有设置该值,它只会返回
false
. 的另一个好处
empty
您可以测试数组键之类的结构,而不用担心对象是否是数组:
php > var_dump( empty( $a[\'foo\'] ) ); // $a is undefined
php shell code:1:
bool(true)
php > var_dump( empty( $a[\'foo\'][\'bar\'][32] ) ); // $a is undefined
php shell code:1:
bool(true)
php > var_dump( empty( $o->foo ) ); // $o is undefined
php shell code:1:
bool(true)
上面,您可以看到PHP并没有抱怨缺少
$a
或
$o
由于没有定义,它只是告诉我们;是的,那是空的;然后继续。
使用isset和is\\U数组
function wp_custom_attachment() {
wp_nonce_field( plugin_basename(__FILE__), \'wp_custom_attachment_nonce\' );
$html = \'<p class="description">Upload your PDF here.</p>\';
$html .= \'<input id="wp_custom_attachment" name="wp_custom_attachment" size="25" type="file" value="" />\';
$filearray = get_post_meta( get_the_ID(), \'wp_custom_attachment\', true );
if ( is_array( $filearray) && isset( $filearray[\'url\'] ) ) {
$html .= \'<div><p>Current file: \' . $filearray[\'url\'] . \'</p></div>\';
}
echo $html;
}
这种方法进行两部分验证——首先,我们确保
$filearray
确实是一个数组,然后我们验证
url
密钥存在。这比
empty
, 并具有类型检查的附加好处。应该注意的是
empty( $filearray[\'url\'] )
只有在以下情况下才能工作
$filearray
是一个数组,因为语法规定了它,但是,此检查不是显式的。
关于三元和零聚结的一个注释
一些人建议使用三元:
$this_file = ! empty( $filearray[\'url\'] ) ? $filearray[\'url\'] : \'\';
这很好,虽然一开始有点难摸索。如果PHP版本支持空合并,也可以使用空合并:
$this_file = $filearray[\'url\'] ?? \'\';
虽然这些都很好,但我还是会避免使用它们,直到你对PHP更熟悉为止。几个月后再回到旧代码中,试着记住你在代码看起来像什么的时候做了什么,这很糟糕
$foo = $bar ? ( $baz ?? false ) : ( $done ?: \'Waiting\' );