2017-09-05 60 views
-2

在一家商店,以下函數會引發致命錯誤。這個錯誤究竟告訴了我什麼?如何解釋「致命錯誤:未捕獲錯誤:調用成員函數get_price()在布爾中」

功能:

$product = wc_get_product($product_id); 
$price = $product->get_price(); 

錯誤:

Fatal error: 
Uncaught Error: Call to a member function get_price() on boolean in 

這是否意味着我得到一個布爾回來,而不是一個字符串或數字?該錯誤是從哪裏調用get_price()

+0

爲什麼不檢查?要麼通過使用IDE調試器,要麼通過簡單地var dump你回來的東西 – JimL

+0

@JimL好問題。這個錯誤在我的測試安裝中沒有發生,而是在其他人的電子商務店中發生。我無法訪問該安裝。 – alev

+2

「_stead of a string or number_」,而不是* OBJECT * – Scuzzy

回答

3

Does this mean that I get a boolean back instead of a string or number?

正是開始。我假設你的$ product_id不存在,在這種情況下,wc_get_product()返回false。但是,文檔(https://docs.woocommerce.com/wc-apidocs/function-wc_get_product.html)說,該方法將在不存在的產品上返回null(如果您使用的是WooCommerce)。

並且:調用字符串或數字的方法也不行。您期待您的代碼片段中有一個對象。

更新

採取照顧這裏的其他建議爲好。

如果您使用混合返回類型的方法(在這種情況下爲bool/object),您應該始終先檢查響應,然後再將其用作對象。解決這個問題

+0

這有幫助。可能你是對的。在這種情況下,潛在的電子商務商店可能會有一些非標準的產品頁面實現。 – alev

2

如果$product是一個布爾值,那麼這行

$product = wc_get_product($product_id); 

失敗行來了!

您可以通過檢查什麼是$product_id

+0

錯誤來自我調用get_price()的行。在那種情況下,你是否回答同樣的問題? – alev

+1

是的。如果'wc_get_product($ product_id)'成功了'$ product'將會是一個對象 – RiggsFolly

+0

這有幫助。可能你是對的。在這種情況下,潛在的電子商務商店可能會有一些非標準的產品頁面實現。 – alev

1

的一種方法是調用預期功能

$product = wc_get_product($product_id) 
if($product instanceof WC_Product) 
{ 
    $price = $product->get_price(); 
} 

在其焦點N您可以添加任何futher邏輯或拋出一個錯誤之前檢查你所期望的類。

+0

有趣。那麼FOO會是什麼?產品類? – alev

+2

FOO(google for「foo bar」)只是一個佔位符。 「實例」是一個PHP運算符,用於檢查變量是否包含某個特定對象的實例。 在您的情況下,WC_Product的$ product實例很可能是適合您需求的代碼。 – iquellis

+0

實施您的解決方案將避免發生致命錯誤。但是,店主不會看到應該的東西(沒有價格,我的代碼幾乎沒用)。你會建議改變我的代碼,至少會拋出一個警告並添加一個調試條目嗎?或者保持原樣不是更好嗎?在這種情況下(比如今天),我會收到店主的一封電子郵件,我可以解釋他的潛在問題。 – alev

相關問題