Rozwiązanie Michaela działa w większości przypadków, ale są pewne szczególne przypadki, które należy wziąć pod uwagę, gdy chcemy mieć uniwersalne rozwiązanie.
Po pierwsze, obiekt, który testuje się przy użyciu metody getTimestamp()
, nie musi być instancją DateTime
. Potrafię w wielu przypadkach, gdy pole znacznika czasu byłoby użyteczne w obiekcie, więc zamiast tego przetestowałbym metodę getTimezone()
.
Po drugie, jeśli my_var
jest obiektem o zdefiniowanej metodzie magicznej __call
, wszystkie takie testy wypadłyby pozytywnie. Dlatego proponuję następujące ujemny wynik testu:
{% if my_var.timezone is defined and my_var.nonExistingProperty is not defined %}
{{ my_var|date('m/d/Y') }}
{% else %}
{{ my_var }}
{% endif %}
Drugi przypadek był jednym niedawno zmagał się z powodu użycia obiektów Propel ORM. Klasa bazowa ma metodę __call
, która przechwytuje wszystkie testy Twig is defined
.
problem związany na github: [rozważyć testu instanceof] (https://github.com/fabpot/Twig/issues/553) –
@DanLee Dzięki, że to interesujące, ale rozumiem dlaczego PR został zamknięty bez scalone ponieważ będzie to wyglądać jak mieszanka PHP i Twig. –
Tak, rzeczywiście, to nie jest tak naprawdę sprawa z widokiem. Pomyślałem, że może to pomóc, jeśli naprawdę chcesz zaimplementować operatora 'instanceof'. –