Forum und email

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));
?>
Το παράδειγμα εμφανίζει τον PHP κώδικα μέσα στο μπλοκ 'declare', καταγράφοντας τον χρόνο κατά τον οποίο κάθε δευτερεύουσα χαμηλού επιπέδου δήλωση στο μπλοκ εκτελείται. Αυτή η πληροφορία μπορεί στη συνέχεια να χρησιμοποιηθεί στην εύρεση "αργών" περιοχών μέσα σε ιδιαίτερα τμήματα του κώδικα. Αυτή η διαδικασία μπορεί να εκτελεστεί χρησιμοποιώντας και άλλες μεθόδους: η χρήση ticks είναι πιο άνετη και εύκολη στην υλοποίηση.

Τα ticks ταιριάζουν ωραία στο debugging, υλοποιώντας απλές multitasking και backgrounded I/O εργασίες καθώς και διάφορες άλλες.

Δείτε επίσης τις register_tick_function() και unregister_tick_function().