2017-09-14 87 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。

不幸的是,在你的代碼的其他地方仍然會有問題,你認爲這是一個數組,實際上是一個字符串。

像這樣設置你的功能會產生一個錯誤,這是很好的,因爲它會使問題變得更加明顯。如果你修改你的函數來忽略這個問題,它可能會造成更多混淆行爲和潛在的不同錯誤。

相關問題