1. דף הבית
  2. קורסים אונליין
  3. קורס PHP אונליין
  4. המרת טיפוסי משתנים - casting, coercion

המרת טיפוסי משתנים - casting, coercion

בפרק זה נלמד כיצד מבצעים המרה בין טיפוסי משתנים שונים ב-PHP. נלמד מהם Casting ו-Coercion ומה ההבדלים ביניהם. כדי להבין טוב יותר את הנושא, נספק דוגמאות ונציג שיטות עבודה מומלצות להמרת טיפוסים ב-PHP.
המרת טיפוסים ב-PHP

המרת טיפוסים ב-PHP

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

שני המנגנונים להמרת הטיפוסים הם אלו:

  1. המרת טיפוסים מפורשת (Casting) - המרת טיפוסים מסוג Casting היא המרה מפורשת של משתנה מטיפוס אחד לאחר. היא מבוצעת באופן ידני על ידי המתכנת בסקריפט.
  2. המרת טיפוסים מרומזת (Coercion) - המרת טיפוסים מסוג Coercion היא המרה שנעשית במרומז למשתנה מטיפוס אחד לאחר. היא מטופלת על ידי PHP בצורה אוטומטית בהתאם לצורך, וללא הנחיה מפורשת בקוד.

נבחן להלן מנגנוני המרה אלו.

המרת טיפוסים מפורשת - Casting

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

סוגי Casting נפוצים:

  • (int) או (integer) - ממיר למספר שלם. נעשה בד"כ במטרה להמיר מחרוזת למספר, כדי שניתן יהיה לשלב את הערך המספרי בחישובים מתמטיים.
  • (float) או (double) - ממיר למספר נקודה צפה (שבר עשרוני). נעשה בד"כ במטרה להמיר מחרוזת למספר נקודה צפה, כדי שניתן יהיה לשלב את הערך בחישובים מתמטיים, או במטרה להמיר מספר שלם למספר נקודה צפה, כדי שניתן יהיה לשלב אותו בחישובים מתמטיים המערבים שברים מתמטיים.
  • (string) - ממיר למחרוזת. נעשה בד"כ במטרה להמיר ערכים מספריים למחרוזות, במטרה לשלב את הערכים הללו במניפולציות של מחרוזות (כגון שרשור מחרוזות).
  • (bool) או (boolean) - ממיר לטיפוס בוליאני. נעשה בד"כ במטרה להמיר מספר (0 או מספר אחר) לערך false (במקרה של המספר 0) או true (במקרה של כל מספר אחר, חיובי או שלילי). נעשה בד"כ לערכים מספריים המוחזרים מקלט משתמש או מ-API.
  • (array) - ממיר למערך. נעשה בד"כ במטרה להמיר מבנה מורכב, לרבות אובייקטים, למבנה מערך פשוט.
  • (object) - ממיר לאובייקט.

נראה דוגמאות להמרות Casting להלן.

המרת מחזורת למספר:

<?php
$numberString = "42.5";
$intNumber = (int)$numberString; // Explicitly casting to integer

echo $intNumber; // Outputs: 42
echo gettype($intNumber); // Outputs: integer
?>

המרת מספר לטיפוס בוליאני:

<?php
$value = 10;
$boolValue = (bool)$value; // Explicitly casting to boolean

echo $boolValue ? 'True' : 'False'; // Outputs: True
?>

המרת אובייקט למערך:

<?php
class Car {
    public $make = "Toyota";
    public $model = "Corolla";
}

$car = new Car();
$arrayCar = (array)$car; // Casting object to array

print_r($arrayCar);
// Outputs:
// Array
// (
//     [make] => Toyota
//     [model] => Corolla
// )
?>

המרת טיפוסים מרומזת - Coercion

PHP מבצעת באופן אוטומטי המרת טיפוסים בעת הצורך, כגון במהלך פעולות מתמטיות (המרה של מחרוזות לערכים מספריים: integer ו-float) או שרשור מחרוזות (המרת ערכים מספריים למחרוזות). סוג זה של המרה מתבצע לעתים קרובות בצורה חלקה, אבל הוא עלול גם להוביל לתוצאות בלתי צפויות אם הוא לא נעשה בזהירות.

נראה דוגמאות להמרות Coercion להלן.

המרת מחזורת למספר:

<?php
$stringNumber = "5";
$result = $stringNumber + 10; // PHP automatically coerces the string to an integer

echo $result; // Outputs: 15
echo gettype($result); // Outputs: integer
?>

המרת מספר לטיפוס בוליאני:

<?php
$value = 0;
$result = $value ? true : false; // PHP coerces 0 to false

if ($result) { // Outputs: False
	echo 'True';
} else {
	echo 'False';
}
?>

המרת מערך למחרוזת:

<?php
$array = [1, 2, 3];
echo "Array: " . $array; // Warning: Array to string conversion
?>

המרה של מערך למחרוזת היא המרה בעייתית אשר תפיק אזהרה (warning). תוצאת ההמרה אינה צפויה.

סיכום ההבדלים בין Casting ל-Coercion

נסכם בטבלה את ההבדלים המרכזיים בין שני סוגי ההמרה.

  Casting Coercion
סוג המרה מפורש מרומז
מי שולט בו המתכנת מנוע PHP
אופן השימוש הצמדת מילת מפתח כמו (int) קורה אוטומטית בפעולות
יכולת חיזוי התוצאה תוצאה צפויה תוצאה בלתי צפויה לעיתים

שיטות המרה נפוצות לעבודה עם המרות ב-PHP

  • הימנע מ-Coercion - המרה מרומזת עלולה לגרום להתנהגות בלתי צפויה. שים לב תמיד לפעולות המשלבות טיפוסי נתונים שונים.
  • השתמש ב-Casting לבהירות - כאשר ערך נדרש להיות מטיפוס מסויים, מומלץ להשתמש ב-casting, על מנת להפוך את הקוד לברור, קריא וצפוי.
  • בדיקת טיפוסים - ניתן להשתמש בפונקציות is (כגון is_numeric או is_string) כדי למנוע שגיאות.
  • טיפול בשגיאות - עקוב אחרי שגיאות הנוצאות מהמרת טיפוסים בצורה מרומזת ותקן את הקוד בהתאם, כדי למנוע שגיאות אלו.

דוגמאות מהעולם האמיתי

נציג מספר דוגמאות למקרים אמיתיים בהם נעשה שימוש בהמרת טיפוסים.

עיבוד קלט משתמש

קלט שמגיע מטפסים שממלאים המשתמשים הוא מטיפוס מחרוזת או מטיפוס מערך של מחרוזות. יש להמיר את מחרוזות אלו לטיפוסים הנדרשים בהתאם לצורך.

דוגמה:

<?php
$input = $_POST['age'];
$age = (int)$input; // Ensuring the input is an integer

if ($age >= 18) {
    echo "Eligible";
} else {
    echo "Not eligible";
}
?>

עבודה עם API

בהתממשקות באמצעות API, ערכים יחזרו מפונקציות ה-API השונות ברוב המקרים כמחרוזת במבנה נתונים המכונה JSON. לנוחיות העבודה, נמיר את מחרוזות ה-JSON למערכים או לאובייקטים.

דוגמה:

<?php
$json = '{"name": "John", "age": 30}';
$data = json_decode($json); // Coerces JSON string to an object

echo $data->name; // Outputs: John
?>
הוספת תגובה
אנו משתמשים בעוגיות על מנת לשפר את חווית המשתמש באתר. מדיניות הפרטיותאני מסכים