Forum und email

סוגי ביטויים

PHP/FI 2.0 השתמש בצד השמאלי של הביטויים לקבוע מה סוג התוצאה צריכה להיות. PHP 3.0 לוקח בחשבון את שני הצדדים כאשר הוא קובע את סוגי התוצאה, וזה יכול לגרום לסקריפטים של 2.0 להתנהג באופן בלתי צפוי ב- 3.0.

התייחס לדוגמא הבאה:

<div dir="ltr">
$a[0]=5;
$a[1]=7;

$key = key($a);
while ("" != $key) {
    echo "$keyn";
    next($a);
}
</div>
ב- PHP/FI 2.0, זה היה מציג את האינדקסים של $a. ב- PHP 3.0, זה לא יציג שום דבר. הסיבה היא שב- PHP 2.0, משום שהארגומנט השמאלי הוא מחרוזת, השוואת מחרוזות נעשתה, ואומנם, "" לא שווה ל- "0", והסקריפט ייכנס ללולאה. ב- PHP 3.0, כאשר מחרוזת משווה למספר שלם, השוואת מספרים שלמים נעשית (המחרוזת מומרת למספר שלם). התוצאה בהשוואה של atoi("") אשר הוא 0 ו- variablelist אשר הוא גם 0, ומכיוון ש- 0==0, הסקריפט לא הולך דרך הלולאה אפילו פעם אחת.

התיקון לזה פשוט. החלף את משפט ה- While בזה:

<div dir="ltr">
while ((string)$key != "") {
</div>