Forum und email

מעבר בין טיפוסים

אין שום דרישה ב PHP (או תמיכה בכלל) בהגדרת המשתנים בעת ההצהרה עליהם ; הטיפוס של המתשנה נקבע לפי ההקשר של השימוש בו. למשל אם השמנו מחרוזת למשתנה $var , $var יהיה מחרוזת. אם אחרי זה השמנו שלם ל $var , הוא יהפך לשלם.

דוגמא טובה לדושיח האוטומטי בין הטיפוסים ב PHP הוא האופרטור '+'.אם אחד מהאופרנדים הוא מסוג עשרוני, כל האופרנדים יוערכו כמספרים עשרוניים , והתוצאה תהיה מספר עשרוני, אחרת, האופרנדים יוערכו כמספרים שלמים, והתוצאה תהיה מספר שלם. שים להב שאין שום שינוי בטיפוס של האופרנדים עצמם, רק את צורת הערכה שלהם .

<?php
$foo 
"0";  // $foo is string (ASCII 48)
$foo += 2;   // $foo is now an integer (2)
$foo $foo 1.3;  // $foo is now a float (3.3)
$foo "10 Little Piggies"// $foo is integer (15)
$foo "10 Small Pigs";     // $foo is integer (15)
?>

אם שני הדוגמאות למעלה נראות משונות, ראה דו-שיח בין מחרוזות ומספרים.

אם אתה רוצה לכפות על משתנה כלשהו, להיות מוערך כטיפוס ספציפי, ראה את המדריך עלהמרת טיפוסים (cast). אם אתה רוצה לשנות את הטיפוס של המשתנה ,ראה settype().

אם תרצה לבחון איזה מהפונקציות שהובאו למעלה, תוכל להתשמש בפונקציה var_dump() .

Note: ההתנהגות בהמרה אוטומית למערכים עוד לא אופיינה כרגע.

<?php
$a 
"1";     // $a is a string
$a[0] = "f";  // What about string offsets? What happens?
?>

מאחר ו PHP (מסיבות הסיטוריות) תומכת באותה שיטת אינדקסים למערכים ולמחרוזות(שימוש בסוגריים מרובעים). הדוגמא למעלה יוצרת בעיה : האם $a יהפך למערך כשהאלמנט הראשון בו הוא יהיה "f" , או שזה פשוט יהיה התו הראשון של המחרוזת $a?
כרגע PHP משתמשת בשיטה השניה ,כך ש, $a תהפך למחרוזת "f",התוצאה עדיין נחשבת ללא מוגדרת היטב. PHP 4 הציגה את התחביר של סוגריים מסולסלים, לפניה לתוים בתוך מחרוזת, השתמש בתחביר הזה ולא בתחביר בדוגמא למעלה:
<?php
$a    
"abc"// $a is a string
$a{1} = "f";   // $a is now "afc"
?>
ראה גם את המדריך על See the section titled גישה לתוים במחרוזת. למידע נוסף.

המרת טיפוסים (cast)

המרת טיפוסים בPHP דומה מאוד להמרה ב C: השם של הטיפוס המבוקש , נכתב בסוגריים לפני המשתנה,שברצונך לעשות לו המרה.

<?php
$foo 
10;   // $foo is an integer
$bar = (boolean) $foo;   // $bar is a boolean
?>

ההמרות המותרות הן:

  • (int), (integer) - המרה לשלם
  • (bool), (boolean) - המרה לבולאני
  • (float), (double), (real) - המרה למספר בעל נקודה עשרונית
  • (string) - המרה למחרוזת
  • (array) - המרה למערך
  • (object) - המרה לאוביקט

שים לב שרווחים וטאבים מותרים בתוך הסוגריים, כך שהפונקציות הבאות מקבילות:

<?php
$foo 
= (int) $bar;
$foo = ( int ) $bar;
?>

Note: אפשר לכתוב מרכאות סביב ביטוי, בשביל להמיר אותו למחרוזת , במקום לעשות לו המרה מפורשת.

<?php
$foo 
10;            // $foo is an integer
$str "$foo";        // $str is a string
$fst = (string) $foo// $fst is also a string

// This prints out that "they are the same"
if ($fst === $str) {
    echo 
"they are the same";
}
?>

לא תמיד ברור מה יקרה בהמרה מטיפוס אחד למשנהו, לידע נוסף ראה במדריך על: