declare הוא שיטה לשליטה בזרימה של קוד (flow control structure) המשמשת אותנו למדידות שונות. לא רבים משתמשים ב-decalre אך לעיתים הוא שימושי מאד – במיוחד בבדיקות אך לא רק. נכון לגרסת PHP 5.3 אנו יכולים להשתמש ב-declare רק יחד עם ticks, אבל בעתיד זה יכול להשתנות.
בואו ונלמד איך עושים declare! בדומה לשיטות אחרות של שליטה בזרימת קוד (כמו while) אפשר לעשות את זה בשני אופנים:
declare(ticks=1) {
// entire script here
}
או:
declare(ticks=1);
// entire script here
נשאלת השאלה מה זה בעצם עושה? כל קוד שנמצא בתוך ה-declare (או מתחת לו) נחשב כ'טיק', טיק במקרה הזה זו לא תנועה לא רצינית אלא הוא מתקיים בכל פעם שיש פעולה כלשהי. הגדרת משתנה, חיבור של משתנה, הוספה וכל פעולה שהיא (כמעט).
שימו לב לקוד הבא, בכל פעם שמתקיים tick אז שמתי הערה:
declare (ticks=1)
{
$pass = md5('qwerty'); /* Tick executed */
$pass = strrev($pass); /* Tick executed */
echo $pass; /* Tick executed */
}
בכל פעולה שהיא רץ tick, אם אנו רוצים ש-tick ירוץ בכל שתי פעולות, אנו נשנה את הצהרת ה-declare למשהו בסגנון הבא:
declare (ticks=2)
{
$pass = md5('qwerty');
$pass = strrev($pass); /* Tick executed */
echo $pass;
}
אפשר כמובן לבחור שה'טיק' ירוץ כל שלוש פעולות, או אלף פעולות לצורך העניין, למשל:
declare (ticks = 3)
{
$pass = md5('qwerty');
$pass = strrev($pass);
echo $pass; /* Tick executed */
}
אז הבנו איך משתמשים ב-declare ומה זה tick, עכשיו נלמד על הצמדה של פונקציה שרצה בכל פעם שיש tick. נניח שיש פונקציה שאנו רוצים שתרוץ בכל פעם שמתבצע tick, כל מה שעלינו לעשות זה ליצור אותה ולהצמיד אותה ל-tick באמצעות הפונקציה register_tick_function.
הכי טוב להסביר עם דוגמא:
< ?php
function my_function() {
print 'tick! ';
}
register_tick_function('my_function');
declare(ticks = 1) {
$pass = 'qwerty'; /* Tick executed */
$pass = 'moshe'; /* Tick executed */
$pass = 'hahaha'; /* Tick executed */-
}
בדוגמא שלעיל יודפס טיק בכל פעם שתתרחש פעולה כלשהי. אם יש לנו while או כל לולאה אחרת, טיק ירוץ על כל ריצה של לולאה.
tick הוא שימושי מאד במיוחד בבדיקות שונות ומשונות – כאשר יש לכם זליגת זכרון ואתם לא יודעים מהיכן היא מגיעה, או כהזדמנות לראות את יעילות הקוד והזמן שלוקח לסקריפט לרוץ.