沉冰浮水

沉冰浮水

做最终到的事,成为最终成为的人!
github
bilibili
mastodon
zhihu
douban

「水坑」Z-BlogPHP 中各種錯誤提示的複現

嚴格來說並不都是 Z-BlogPHP 獨有的錯誤;

另外這裡標題是「複現」,以最簡單的例子演示為什麼會出現這種錯誤,至於初學者能否看懂以及能否幫助解決實際的問題。。emmm

包月 59.3 看心情解答各種問題。。zblog 為主。。

HelloZBlog「插件開發演示」 - Z-Blog 應用中心:

https://app.zblogcn.com/?id=18072

zb_users\plugin\HelloZBlog\include.php 中有一個 HelloZBlog_debug() 函數,在該函數內可以測試複現下邊各種錯誤;


Array and string offset access syntax with curly braces is no longer supported

offset access直譯是「偏移訪問」,對應的中文概念是「(數組)下標」;

syntax是「語法」,比如PHPJavaScript在表達普通字符串時單引號和雙引號都可以,但是涉及「變量解析 / 模板字符串」時有各自的「規則語法」;

curly braces是「大括號」;

no longer supported—— 不再支持;

// 正確
$arr = array(1,2,3);
echo $arr[0];
// die();

// 錯誤
$arr = array(1,2,3);
echo $arr{0}; // Array or string offset access with curly braces deprecated in PHP 7.4. Targeting PHP 8.1.0.
// die();

編輯器語法檢測會提示:

「花括號」形式的「數組或字符串下標」已經在「PHP 7.4 中廢棄(deprecated)」,然後「Targeting PHP 8.1.0」;

所以這個「Targeting」該怎麼翻譯。。我自己現在用的 7.4,實際花括號並沒有報錯,各種討論中也是用 PHP 8 的會出現這個報錯;


Trying to access array offset on value of type null

// 正確
$var = array(0);
echo $var[0];
// die();

// 報錯
$var = null;
echo $var[0];
// die();

Function name must be a string

// 正確
$var = "fnTest"; // 前提是 fnTest() 函數存在
echo $var();
// die();

// 報錯
$var = 1024;
echo $var();
// die();

Call to undefined function fnTest()

對於上邊$var = "fnTest";的示例能夠正確執行,需要定義:

function fnTest()
{
  return "test";
}

Call to a member function fnTest() on bool

$obj = true;
$obj->fnTest();
// die();

Array to string conversion

// 正確,輸出前進行轉換或額外處理
$arr = array(0, 1, 2);
echo implode(", ",$arr);
// die();

// 錯誤,直接以 string 輸出
$arr = array(0, 1, 2);
echo $arr;
// var_dump("$arr"); // 另外一種錯誤姿勢
// die();

參考:

php 提示 Array to string conversion 解決方案:https://blog.csdn.net/zeroking_vip/article/details/87960319 「CSDN 少數有用的內容」

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。