我正在使用ChatGPT來幫我更快地修復代碼,但代價是什麼?

圖片5.jpg

本週早些時候,我向您展示了如何使用ChatGPT創建一個符合特定功能需求(雖然有些初步)的WordPress插件。現在,我將繼續測試ChatGPT,以了解它是否可以成為一個有用的工具——在這種情況下,幫助我獲得一些技術指導。

同時: 我讓 ChatGPT 寫了一個 WordPress 外掛程式,它在不到 5 分鐘內完成了

就像我在之前探索ChatGPT時所做的一樣,我的文字都使用普通或粗體字來呈現,AI的回答則是以斜體字顯示。首先,讓我顯示問題和答案,然後再討論其影響。

了解程式語言的變更

我的託管提供商將所有網站從非常過時的 PHP 7.4 移至 PHP 8。PHP 是一種網頁程式語言,WordPress 和其他一些網站管理工具都依賴於 PHP。我有幾個插件不相容 PHP 8,我想確定它們的代碼的哪些方面需要找到並修復。

通常情況下,我會深入研究PHP.net網站,進行大量的Google搜索,並在StackExchange的評論中查找所需的編程工作。但這是一個有點混亂、耗時的過程。相反,我向ChatGPT提出了一個詳細而直接的問題,得到了非常有用的回答,包括示例代碼塊。

我在使用PHP的extract函数时遇到了一个问题,未传递数组参数时会导致致命错误。在PHP 7.4中,我没有遇到这个错误,但在PHP 8中似乎有了。extract函数在PHP 8中改变了吗?

在 PHP 8 中,extract() 函式的行為已經更改為更嚴格。在之前的 PHP 版本中,extract() 函式如果未傳遞陣列,只會返回 false。但在 PHP 8 中,如果未傳遞陣列,將會拋出致命錯誤。此更改旨在提高函式的健壯性,並防止由於意外輸入引起的潛在錯誤。

在调用 extract() 函数之前,可以使用 is_array() 函数检查传递给函数的变量是否为数组。

圖片3.jpg

您也可以使用 array_key_exists() 函數來檢查傳遞的變數是否為陣列。

圖片6.jpg

或者您可以使用...運算子將陣列解構為變量。

圖片7.jpg

事實證明,ChatGPT的回答非常有幫助,我只用了幾分鐘就修復了那個錯誤。能夠修復該錯誤的一大關鍵是知道從一個版本的PHP到另一個版本的函數中的行為有哪些變化。ChatGPT澄清了這一點。

由於我試圖將整個插件升級到新版本,為了保證其未來的完整性,我也提出了以下問題:

從 PHP 7.4 升級到 PHP 8 時,可能會出現哪些會受到破壞的 PHP 函數?

從PHP 7.4升級到PHP 8時,有一些函數和功能可能會出現問題或行為有所不同。以下是一些可能會引起問題的最顯著變更:

  • 如前面所提到的,extract() 函數現在如果沒有傳遞陣列,會拋出致命錯誤。
  • each() 函數在 PHP 8.0 中已被移除。您可以使用 foreacharray_keys()current() 代替。
  • create_function() 函數在 PHP 8.0 中已被移除。建議改用匿名函數。
  • 當與 foreach 一起使用時,list() 構造現在將鍵和值作為單獨的變數返回,而不是一個單一的陣列。
  • __autoload() 函數在 PHP 8.0 中已被移除。應使用 spl_autoload_register() 代替。
  • $php_errormsg 變數在 PHP 8.0 中已被移除。應使用 error_get_last() 函數代替。
  • 在 PHP 8.0 中,一些在先前 PHP 版本中被棄用的內容已被移除。具體而言,create_function()each()__autoload()$php_errormsg 被移除。

這只是一些從PHP 7.4升級到PHP 8可能造成問題的變化的例子。在升級之前,強烈建議仔細測試您的代碼和應用程序,以確保一切按預期運行。

請注意,ChatGPT使用了「正如之前的回答中提到的」這個詞語。它能夠追蹤會話中的回答。這既令人驚訝,也讓人感到害怕。

在我正修訂的程式碼中,原先的開發者(早已離開畫面)大量使用了 create_function。我並沒有意識到它已被棄用。但有了上面的有用清單,我只需要搜尋程式碼,找到需要更新和重寫的部分。然後,我繼續請求 ChatGPT 顯示取代該函式的方法。

使用 create_function 在 PHP 中重寫代碼的好方法是什麼?你可以給我一個使用 create_function 的例子,然後再給我一個使用目前適當機制的例子嗎?

create_function 是在PHP中用來創建匿名函數的已過時函數。由於在PHP 8.0中已經被移除,因此不再推薦使用此函數。相反,可以使用 function 關鍵字來創建匿名函數,也稱為閉包。

這裡是一個使用 create_function 的例子:

圖片2.jpg

以下是使用匿名函數的等效代碼:

圖片8.jpg

此外,您可以使用use關鍵字將變數傳入閉包中。

image1.jpg

一般而言,建議使用匿名函數而不是 create_function,因為它們具有更好的效能和可讀性。

事實上,那是一個很清楚的解釋,我能夠很快地適當地重寫程式碼。那個外掛現在在我提供商的新 PHP 8 環境中順利運行,沒有任何問題。

MacOS 技術支援

在研究關於Optimize Mac Storage的危險性的文章時,我也有一些問題。正如我的文章所示,我進行了一些測試來驗證我一些擔憂的事情。但為了快速縮小我的研究範圍,我問了ChatGPT這個問題:

如果您使用MacOS的優化Mac存儲功能,是否會導致Time Machine進行不完整的備份,因為一些文件只存在於本地機器上的標誌?

macOS 中的「優化 Mac 儲存空間」功能使用 iCloud 將從不經常使用的檔案從您的 Mac 雲端遷移,同時保留一個「stub」檔案在您的本機上代表原始檔案。這樣可以節省您 Mac 硬碟上的空間。

當 Time Machine 設定為備份時,它將備份所有文件,包括那些使用「優化 Mac 儲存空間」進行卸載的文件。然而,代表被卸載文件的標誌檔將被備份,取代原始文件。

這意味著,如果您從一個在「優化 Mac 儲存空間」啟用的情況下製作的 Time Machine 備份恢復您的 Mac,任何被卸載的文件都不會包括在恢復中,需要再次從 iCloud 下載。

需要注意的是,如果您有很多已卸載的檔案,使用「優化 Mac 儲存空間」會導致 Time Machine 備份佔用更多的空間,因為 Time Machine 會將這些檔案的標誌性檔案進行備份,這些標誌性檔案佔用的空間較少,但 Time Machine 會視其為原始檔案。

我確實擔心這個問題。至少使用Google,作者仍然有機會因為分享信息而獲得搜索引擎送來的流量。但對於像ChatGPT這樣的聊天機器人來說,原始討論串就會消失。當然,我可以很快地獲得回答的效益。但是,也許有人因此失去了他們作品的歸屬?

請繼續關注,這一波生成式人工智慧正在引起巨大的衝擊。與我和ZDNET一起努力理解它對我們所有人意味著什麼。

ChatGPT,當你回答問題時,你是否依賴他人提供的知識?這樣做是否剝奪了原本的人類來源的工作和榮譽?

作為一個由OpenAI創建的AI語言模型,我沒有個人意見或思想。然而,我可以告訴您,我生成回答所使用的信息是基於我所訓練的數據,該數據包含來自網絡的大量文本。這些文本是由許多不同的人和來源撰寫的,我無法將信息歸功於特定的個體。我的目標是提供有用且準確的信息,以協助用戶找到他們尋求的答案。請記住,我的回答是基於我所訓練的數據中的模式生成的,可能不是完全準確或最新的。

所以,是的。那个。 "来自互联网的大量文本。" 各位请继续前进。这里没什么可看的。

總而言之,在使用「優化 Mac 儲存空間」功能時,時光機器將進行不完整的備份,因為它只會備份已轉移到雲端的原始檔案的替身檔案。

這是一個正確的答案。

意義

嗯,這確實節省了時間。通常,在網上編程涉及編碼和調試環境之間的一種舞蹈,以及大量的增量網絡搜索,其中追踪線索,閱讀討論和評論。

不要誤會,那個過程可能非常有資訊性,還有許多傳說中的留言,你在聊天機器人中永遠無法得到。但在你匆忙或面臨重要期限時,這不是一個有效利用時間的方式。向ChatGPT問這些編碼問題被證明非常高效。

像所有的人工智慧一樣,你必須要意識到人工智慧的知識有限,很有可能會獲得完全錯誤的答案。但是,將 ChatGPT 視為一種像其他工具一樣直接使用的工具,仍然相當有效。

不過,我還是擔心它從哪裡獲取資訊。會不會有像我這樣的作家寫了一篇深入的有關 extract 或 create_function 的文章,而 ChatGPT 把這些文字拼湊起來做出回應,卻沒有給予擁有者的功勞或獲利?是否有人辛苦累積的知識被不當地當作答案的來源,卻沒有得到應有的標示?

相關文章

查看更多 >>

透過 HIX.AI 釋放 AI 的力量!