declare
Η δομή declare χρησιμοποιείται για να θέσει ντιρεκτίβες εκτέλεσης (execution directives) για ένα block κώδικα. Η σύνταξη της declare είναι παρόμοια με τη σύνταξη άλλως δομών ελέγχου ροής:
declare (directive) statement
Το κομμάτι της directive επιτρέπει τη συμπεριφορά του declare block να αρχικοποιηθεί. Προς το παρόν μόνο μία directive αναγνωρίζεται: η ticks directive. (Δείτε παρακάτω για περισσότερες πληροφορίες σχετικά με την ticks directive)
Το μέρος δηλώσεων του block της declare θα εκτελεστεί -- πώς εκτελείται και τι side effects εμφανίζονται κατά την εκτέλεση εξαρτάται από πώς θα τεθεί η directive στο block της directive.
Η δομή declare μπορεί επίσης να χρησιμοποιηθεί σε global εμβέλεια, επηρεάζοντας ολόκληρο τον κώδικα που ακολουθεί.
<?php // these are the same: // you can use this: declare(ticks=1) { // entire script here } // or you can use this: declare(ticks=1); // entire script here ?>
Ticks
Ένα tick είναι ένα event που εμφανίζεται για κάθε N low-level δήλωση που εκτελείται από τον μεταγλωττιστή μέσα στο declare block. Η τιμή για το N είναι συγκεκριμένη χρησιμοποιώντας ticks=N μέσα στα declare blocks του τμήματος της directive.
Τα event(s) που εμφανίζονται σε κάθε tick είναι συγκεκριμένα χρησιμοποιώντας την register_tick_function(). Δείτε το παρακάτω παράδειγμα για περισσότερες λεπτομέρειες. Σημειώστε ότι περισσότερα από ένα event μπορούν να εμφανιστούν για κάθε tick.
Example#1 Το προφίλ ένος τμήματος κώδικα PHP
<?php
// A function that records the time when it is called
function profile ($dump = FALSE)
{
static $profile;
// Return the times stored in profile, then erase it
if ($dump) {
$temp = $profile;
unset ($profile);
return ($temp);
}
$profile[] = microtime ();
}
// Set up a tick handler
register_tick_function("profile");
// Initialize the function before the declare block
profile ();
// Run a block of code, throw a tick every 2nd statement
declare (ticks=2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text (md5($x), md5($x*$x)), "<br />;";
}
}
// Display the data stored in the profiler
print_r (profile (TRUE));
?>
Τα ticks ταιριάζουν ωραία στο debugging, υλοποιώντας απλές multitasking και backgrounded I/O εργασίες καθώς και διάφορες άλλες.
Δείτε επίσης τις register_tick_function() και unregister_tick_function().