2010-03-14 17 views
26

Jestem trochę zdezorientowany przez funkcję PHP declare.PHP za pomocą Declare? Co to jest kleszcz?

Czym dokładnie jest jeden tykot? Myślałem, że zaznaczenie jest równe jednej linii kodu?

Ale jeśli mogę użyć:

function myfunc() { 
     print "Tick"; 
} 

register_tick_function("myfunc"); 

declare(ticks=1) { 
    echo 'foo!bar'; 
} 

drukuje skrypt:

"Tick" 2 razy ??

Odpowiedz

22

Otrzymujesz zaznaczenie dla każdej linii; i każdy blok {} Spróbuj tego:

declare(ticks=1) echo 'foo!bar'; 

nr bloku, bez dodatkowych kleszcza.

declare(ticks=1) {{ echo 'foo!bar'; }} 

Więcej dodatkowych bloków = więcej kleszczy.

PS: przy okazji, tyknięcia są dość egzotyczną cechą i są przydatne tylko w kilku bardzo trudnych sytuacjach . Nie są one odpowiednikiem wątków ani niczego. Jeśli dla ciebie kleszcze są rozwiązaniem problemu, powinieneś opublikować swój problem w innym pytaniu, ponieważ prawdopodobnie nie jest to właściwe rozwiązanie.

+11

Do czego mogą być przydatne * * * znaczniki? – Pacerier

+1

Profilowanie kodu podczas debugowania. – thomasrutter

+0

@thomasrutter Jak? Czy mógłbyś podać przykład lub referencję? – tonix

14

Jesteś na dobrej drodze do tego, co to jest kleszcz.

http://www.tuxradar.com/practicalphp/4/21/0

Mówiąc wprost, kleszcz jest szczególnym wydarzeniem który występuje w PHP wewnętrznie każdą czas wykonała pewną liczbę sprawozdań. Te stwierdzenia są wewnętrzne dla PHP i luźno odpowiadają dla instrukcji w twoim skrypcie. Ci może kontrolować ile sprawozdanie to trwa do potrącenia kleszcza za pomocą funkcji declare(), a można funkcje Zarejestruj się aby wykonać po wystąpieniu kleszcza za pomocą funkcji register_tick_function(). Jak już wspomniano, składnia deklaracji jest bardzo nietypowa, więc przygotuj się na na porażenie!

+1

Dzięki. Znalazłem to dziwne, że podręcznik php.net nie zdefiniował tyknięć w declare() i funkcjach * _tick_function(). Czy wiesz, dlaczego są one usuwane w PHP6? – David

+1

W jaki sposób kleszcze dostały się nawet w PHP? – Pacerier

+0

@Jayrox - Jakiekolwiek dodatkowe dowody na poparcie twojego stwierdzenia "Teoria PHP6 zostanie całkowicie usunięta" teoria? – Jimbo