W JavaScript możesz zdefiniować anonimowe funkcje, które są wykonywane natychmiast:
(function () { /* do something */ })()
Czy możesz zrobić coś takiego w PHP?
php
javascript
function
Emanuil Rusev
źródło
źródło
call_user_func(function(){/* stuff */})
zrobić?Odpowiedzi:
W przypadku PHP7: zobacz odpowiedź Yasuo Ohgaki :
(function() {echo 'Hi';})();
W przypadku poprzednich wersji: jedynym sposobem na ich natychmiastowe wykonanie jest
źródło
call_user_func
W
PHP 7
ma zrobić to samo w javascriptWynik to:
źródło
Oczywiście możesz użyć
call_user_func
, ale jest jeszcze jedna całkiem prosta alternatywa:źródło
run
twojej funkcji w innej części kodu, ponieważ nie ma uchwytu do twojej funkcji istniejącego po linii, która natychmiast ją wykonuje.run()
jest natychmiastowe wykonanie przekazanej mu nienazwanej funkcji. To samo cocall_user_func()
, tylko żadne parametry nie są przekazywane.$f();
i może być szybszy, jeśli używany silnik nie optymalizuje się dla specjalnego przypadku, w którymcall_user_func
ma tylko jeden argument funkcji. Dzieje się tak, ponieważcall_user_func
obsługuje przekazywanie wielu parametrów, a jego pierwszy argument obsługuje ciąg jako argument lub funkcję. To powiedziawszy, jeślicall_user_func
jest dużo czytelny, nie użyłbym,run
chyba że kod znajduje się gdzieś na dole piramidy .run
icall_user_func
.call_user_func
ma nieodłączną wadę w porównaniu z tym,run
żerun
robi tylko jedną rzecz, podczas gdycall_user_func
obsługuje dodatkowe funkcje oprócz robienia tego, corun
robi. Możesz wypróbować szybki test pętli ( np. ), Aby sprawdzić, który jest szybszy w Twoim silniku.To jest najprostsze dla PHP 7.0 lub nowszego.
Oznacza to utworzenie domknięcia, a następnie wywołanie go jako funkcji, podążając za „()”. Działa podobnie jak JS dzięki jednolitej kolejności oceny zmiennych.
https://3v4l.org/06EL3
źródło
źródło
Zauważ, że zaakceptowana odpowiedź jest w porządku, ale zajmuje 1,41 razy dłużej (41% wolniej) niż zadeklarowanie funkcji i wywołanie jej w dwóch wierszach.
[Wiem, że to naprawdę nie jest nowa odpowiedź, ale uznałem, że warto dodać ją gdzieś dla gości.]
Detale:
Wyniki:
źródło
Wypróbowałem to w ten sposób, ale jest to bardziej szczegółowe niż najlepsza odpowiedź, używając dowolnego operatora (lub funkcji), który pozwala najpierw zdefiniować funkcję:
źródło
$hack = function(){...}; $hack()
?To nie jest bezpośrednia odpowiedź, ale obejście. Korzystanie z PHP> = 7. Definiowanie anonimowej klasy za pomocą nazwanej metody i konstruowanie klasy oraz natychmiastowe wywołanie metody.
źródło
Nie wykonano natychmiast, ale blisko;)
źródło