2017-09-14 150 views
1

上下文:在我的WordPress插件安装的网站之一,我看到一系列的PHP警告,但我不完全确定为什么会发生这种情况。我希望这里有人能帮我弄清楚如何解决这个警告。如何解决这些非法字符串偏移警告?

代码示例:

function my_function($array) { 

    if (! isset($array['where'])) { $array['where'] = 'after'; } 
    if (! isset($array['echo'])) { $array['echo'] = false; } 
    if (! isset($array['content'])) { $array['content'] = false; } 

    $array['shortcode'] = true; 
    $array['devs'] = true; 
    return social_warfare($array); 
} 

add_shortcode('my_shortcode', 'my_function'); 

的警告:

警告:非法串在 /home/playitda/public_html/domain.com/wp-偏移 '其中' content/plugins/my_plugin/functions/frontend-output/shortcodes.php on line 14

警告:非法串在 /home/playitda/public_html/domain.com/wp-content/plugins/my_plugin/functions/frontend-output/shortcodes.php 抵销“回响”第15行

警告:不能一个空字符串赋值给一个字符串 /home/playitda/public_html/domain.com/wp-content/plugins/my_plugin/functions/frontend-output/shortcodes.php 抵消线15

警告:非法串抵消'content' /home/playitda/public_html/domain.com/wp-content/plugins/my_plugin/functions/frontend-output/shortcodes.php on line 16

警告:不能为空字符串赋值给一个串上线 /home/playitda/public_html/domain.com/wp-content/plugins/my_plugin/functions/frontend-output/shortcodes.php 偏移16

警告:非法串偏移 '短码' 在 /home/playitda/public_html/domain.com/wp-content/plugins/my_plugin/functions/frontend-output/shortcodes.php 第18行

警告:非法字符串偏移'devs' /home/playitda/public_html/domain.com/wp-content/plugins/my_plugin/functions/frontend-output/shortcodes.php on第19行

出于某种原因,每次遇到数组中的某个索引时都会发出警告。我该如何解决?谢谢!

+3

它看起来像函数期待一个数组并获取一个字符串。 –

+0

那么我该如何强制这是一个数组?我是否在参数中声明它,或者在继续之前检查它并使其成为一个数组? –

+2

是的,你可以['输入提示'](http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration)(远远超过提示7. +)函数签名或显式检查类型...'is_array'。虽然不想在期待数组时传递一个字符串。 – ficuscr

回答

1

功能is_array()在函数开始处的用法可以为您提供保险,即如果有人向您传递了数组以外的其他东西,则变量将重新初始化为空数组。

在执行此操作之前取消设置或无效,因为从PHP 5.3起,PHP确实有一个garbage collector机制。

/** 
* @params array $array 
*/ 
function my_function($array) { 
    if (! is_array ($array)) { $array = [] }; 
    /** 
    * Or, if you don't like the short array notation: 
    * if (! is_array ($array)) { $array = array(); }; 
    */ 

    if (! isset($array['where'])) { $array['where'] = 'after'; } 
    if (! isset($array['echo'])) { $array['echo'] = false; } 
    if (! isset($array['content'])) { $array['content'] = false; } 

    $array['shortcode'] = true; 
    $array['devs'] = true; 
    return social_warfare($array); 
} 

add_shortcode('my_shortcode', 'my_function'); 
+0

虽然其他答案当然是好的,但我选择这一个作为可接受的解决方案,因为这样可以确保如果一些随机的用户调用该函数将某些不适当的东西传递给它,那么该函数将捕获它,重置该数组并且继续做它旨在做的事情。这次真是万分感谢。 –

2

它看起来像函数正在期待一个数组,并且正在获取一个字符串。

您可以在函数定义中要求一个数组。

function my_function(array $array) { ... 

然后,如果你用一个数组以外的东西调用它,你会得到一个TypeError。

不幸的是,在你的代码的其他地方仍然会有问题,你认为这是一个数组,实际上是一个字符串。

像这样设置你的功能会产生一个错误,这是很好的,因为它会使问题变得更加明显。如果你修改你的函数来忽略这个问题,它可能会造成更多混淆行为和潜在的不同错误。

相关问题