2017-09-05 34 views
-2

In einem Geschäft löst die folgende Funktion einen schwerwiegenden Fehler. Was sagt mir der Fehler genau?Wie zu interpretieren "Schwerwiegender Fehler: Uncaught Fehler: Aufruf einer Member-Funktion get_price() auf Boolean in"

Die Funktion:

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

Der Fehler:

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

Bedeutet dies, dass ich einen boolean zurück anstelle einer Zeichenfolge oder Nummer? Der Fehler kommt von der Linie, wo ich get_price aufrufen()

+0

Warum nicht einfach nachschauen? Entweder indem Sie Ihren IDEs-Debugger verwenden oder einfach var dumping, was Sie zurückbekommen. – JimL

+0

@JimL Gute Frage. Dieser Fehler tritt bei meiner Testinstallation nicht auf, sondern bei einem anderen E-Commerce-Shop. Ich habe keinen Zugriff auf diese Installation. – alev

+2

"_ statt einer Zeichenkette oder Zahl_" anstelle eines * OBJECT * – Scuzzy

Antwort

3

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

Genau. Ich nehme an, dass Ihre $ product_id nicht existiert und wc_get_product() in diesem Fall false zurückgibt. Die Dokumentation (https://docs.woocommerce.com/wc-apidocs/function-wc_get_product.html) besagt jedoch, dass die Methode bei nicht vorhandenen Produkten null zurückgibt (wenn Sie WooCommerce verwenden).

Und: Ein Methodenaufruf auf eine Zeichenfolge oder eine Zahl wird nicht so gut funktionieren. Sie erwarten ein Objekt in Ihrem Code-Snippet.

aktualisieren

Achten Sie darauf, für die anderen Vorschläge auch hier.

Wenn Sie Methoden mit gemischten Rückgabetypen verwenden (in diesem Fall bool/object), sollten Sie die Antwort immer zuerst prüfen, bevor Sie sie als Objekt verwenden.

+0

Das hilft. Wahrscheinlich hast du recht. In diesem Fall hat der zugrundeliegende E-Commerce-Shop wahrscheinlich eine nicht standardisierte Implementierung seiner Produktseiten. – alev

2

Wenn $product ist ein boolean dann diese Linie

$product = wc_get_product($product_id); 

ausgefallen!

Sie könnten durch die Überprüfung beginnen, was in $product_id ist

+0

Der Fehler kommt von der Zeile, wo ich get_price() aufrufen. In diesem Fall, antwortest du das gleiche? – alev

+1

Ja. Wenn 'wc_get_product ($ product_id)' '$ product' geschafft hätte, wäre das ein Objekt – RiggsFolly

+0

Das hilft. Wahrscheinlich hast du recht. In diesem Fall hat der zugrundeliegende E-Commerce-Shop wahrscheinlich eine nicht standardisierte Implementierung seiner Produktseiten. – alev

1

Eine Möglichkeit, dies zu beheben, ist die Klasse, die Sie vor der erwarteten Funktion

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

, bei dem Aufruf erwarten zu überprüfen MessfeldsN Sie können entweder weitere Logik hinzufügen oder einen Fehler aus.

+0

Interessant. Und was wäre FOO? Die Produktklasse? – alev

+2

FOO (google für "foo bar") ist nur ein Platzhalter. "instance of" ist ein PHP-Operator, der überprüft, ob eine Variable eine Instanz eines bestimmten Objekts enthält. In Ihrem Fall wäre $ product instance von WC_Product höchstwahrscheinlich der Code, der Ihren Anforderungen entspricht. – iquellis

+0

Die Implementierung Ihrer Lösung würde einen schwerwiegenden Fehler vermeiden. Aber dann würde der Ladenbesitzer nicht sehen, dass etwas nicht so ist, wie es sein sollte (ohne den Preis ist mein Code fast nutzlos). Würden Sie mir raten, meinen Code so zu ändern, dass er zumindest eine Warnung ausgibt und einen Debug-Eintrag hinzufügt? Oder wäre es nicht besser, so zu bleiben wie es ist? In diesem Fall (wie heute) würde ich eine E-Mail vom Ladenbesitzer erhalten und ich könnte erklären, dass das zugrunde liegende Problem auf seiner Seite ist. – alev

Verwandte Themen