In meiner Anwendung ich so etwas wie die folgendenInstanceof Kohlenstoff versagt
if($val instanceof Carbon)
...
leider nur verwenden, wenn ich vorher Carbon im Code verwenden (auch wenn nur Carbon::now();
) wird es immer false zurück. Warum?
In meiner Anwendung ich so etwas wie die folgendenInstanceof Kohlenstoff versagt
if($val instanceof Carbon)
...
leider nur verwenden, wenn ich vorher Carbon im Code verwenden (auch wenn nur Carbon::now();
) wird es immer false zurück. Warum?
Sie verwenden Laravels Klasse Auto-Loader. Sie haben dies bei config/app.php
definiert:
'Carbon' => Carbon\Carbon::class,
... also, wenn Sie laufen diese zum ersten Mal:
Carbon::now();
... benötigt PHP eine Carbon
Klasse, die noch nicht so Klasse definiert ist Autoloading wird ausgelöst und Laravel lädt den Namespace Carbon\Carbon
und definiert einen Carbon
Alias. Somit kann $val instanceof Carbon
true
zurückgeben, wenn die Variable den richtigen Typ hat.
instanceof
selbst wird jedoch keine Klasse automatisch laden auslösen. Documentation schlägt vor, es tut, dass in der Vergangenheit, aber es nicht mehr tut:
Bevor PHP-Version 5.1.0, instanceof nennen würde __autoload(), wenn der Klassenname nicht existiert.
(ich gebe zu ich noch nicht über eine Erklärung, wie Sie können $val
eine Instanz von Kohlenstoff machen, wenn Sie nicht die Klasse noch geladen haben.)
Nicht Sicher verstehe ich ... Wie könnte "$ val" zu diesem Zeitpunkt eine Instanz von Carbon sein, wenn Sie die Bibliothek nicht früher benutzt haben? (In jedem Fall haben Sie wahrscheinlich eine Klasse Auto-Loader.) –
Können Sie den vollständigen Code zur Verfügung stellen? – tommy
Der vollständige Namensraum der 'Carbon' Klasse ist' Carbon \ Carbon', also sollte der Check 'if ($ val instanceof Carbon \ Carbon) sein'. Oder wenn Sie nur nach dem Klassennamen suchen möchten, verwenden Sie am oberen Ende der Datei 'carbon \ Carbon;' und dann '$ val instanceof Carbon'. – Bogdan