Nie jestem pewien, czy nazwałbym 100 milionów "kilkoma iteracjami". Wygląda na to, że nagromadziłeś około półsekundową różnicę, podziel ją przez 100 milionów, a otrzymasz silną 5 nanosekundową różnicę na iterację, jeśli moja matematyka jest poprawna. Ponieważ różnica jest tak mała, może po prostu sprowadzić się do tego, że isset
ma tylko jeden argument w tym kontekście, a ===
ma dwa.
Nie można nawet omówić szczegółów implementacji silnika Zend tych dwóch przykładów bez określenia konkretnej wersji PHP; kod źródłowy to ruchomy cel. Nawet niewielkie zmiany w implementacjach mają wpływ na wyniki w ciągu wielu przejść. Nie zdziwiłbym się, gdyby okazało się, że jest inaczej w niektórych wersjach PHP i/lub w innym kontekście.
isset
sama jest objęta trzema różnymi op-kodów w VM, w zależności od kontekstu:
"Simple" Opracowanie zmiennych takich jak Twój przykład: ZEND_ISSET_ISEMPTY_VAR
Tablice: ZEND_ISSET_ISEMPTY_DIM_OBJ (wymaga 2 argumenty, Var a wskaźnik)
właściwości obiektu: ZEND_ISSET_ISEMPTY_PROP_OBJ (również 2 argumenty, var prop nAME)
jest interesujące pytanie Cu na szczęście, ale dzielimy się włosami i prawdopodobnie nie jest to prawdziwa strategia optymalizacji.
'Isset' nie jest funkcją: jest językiem wbudowanym. Użycie 'isset' jest szybsze niż użycie funkcji. Inną rzeczą jest to, że 'isset' jest używany wszędzie, więc ma sens, że został profilowany na śmierć, podczas gdy' === 'może nie otrzymał tyle miłości. – zneak
Co ciekawe, "isset" służy do sprawdzenia, czy zmienna jest w ogóle ORAZ jeśli nie jest zerowa, podczas gdy operator "===" jest używany do sprawdzenia, czy te dwie wartości są identyczne, czy nie. Można by pomyśleć, że "isset" będzie wolniejszy o kilka milisekund z powodu sprawdzenia dwóch rzeczy, gdzie "===" tylko sprawdza jeden. –
'isset()' jest po prostu ustawiona zmienna sprawdzająca, czy nie. natomiast '===' porównaj wartość. Właśnie dlatego funkcja isset jest bardziej wydajna niż "==="; Myślę, że obie są różnymi rzeczami. Używamy obu do tej samej funkcji. –