תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

יצירת מחלקות ואובייקטים

מחבר:
בתאריך:

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

 

יצירת מחלקה (class)

את הקוד של נושא מסוים מקבצים לתוך מחלקה. הנושא יכול להיות משתמשים באתר (class User) או ספרים (class Books), ולצורך הדוגמה ניצור מחלקה של מכוניות שמקבצת את כל המשתנים והפונקציות שקשורים בנושא למחלקה אחת.

כל מילה בשם המחלקה מתחילה באות גדולה, והקוד עצמו (משתנים ופונקציות) מקובץ בין סוגריים מסולסלים.

class Car {
      // הקוד
}

 

eBook cover The essentials of Object Oriented PHP

 

הוספת תכונות (properties) למחלקה

למשתנים שנמצאים בתוך מחלקות יש שם מיוחד – תכונות (properties). משתנים אילה יכולים לקבל ערכים דוגמת מחרוזות, מספרים ובוליאנים (true : false), ממש כמו כל משתנה רגיל. בוא נוסיף למחלקה שיצרנו תכונות. לתכונות מוסיפים הרשאת גישה מסוג public בתחילתם.

class Car {
        public $comp; 
        public $numWheels = 4;
        public $hasSunRoof = true;
}

לשתיים מהתכונות הוספנו ערכי ברירת מחדל, ולתכונה $comp לא הוספנו ערך ברירת מחדל.

 

יצירת אובייקט מהמחלקה

כדי שניתן יהיה לעשות משהו עם הקלאס, צריך ליצור לו אינסטנס. את האינסטנס אנחנו יוצרים באמצעות מילת המפתח new. כך זה נראה:

$car1 = new Car ();

בדוגמה, יצרנו את האובייקט $car1 מהמחלקה Car באמצעות new.

 

אנחנו יכולים ליצור כמה אובייקטים שנרצה מאותה מחלקה. ניצור אינסטנס נוסף מאותה מחלקה:

$car2 = new Car ();

עכשיו יש לנו שני אובייקטים, הקוד שלהם משותף, אבל לכל אחד מהם יכולות להיות תכונות אחרות.

 

גישה לתכונות של האובייקט

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

echo $car1 -> numWheels;
echo $car2 -> numWheels;

התוצאה: 4 עבור שני האובייקטים.

 

שימו לב, התחביר נראה כך:

$המשתנה <- שם_האובייקט

חשוב, שם המשתנה לא מתחיל ב-$. רק שם האובייקט מתחיל ב-$. 

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

$car1 -> numWheels = 5;
$car1 -> comp = "BMW";
$car2 -> comp = "Mercedes Benz";

 

ואחרי שהזנו את ערכי המשתנים עבור האובייקטים, אנחנו יכולים לגשת לערכים אילו.

echo $car1 -> numWheels;
echo $car2 -> numWheels;
echo $car1 -> comp;
echo $car2 -> comp; 

והתוצאה:

5
4
BMW
Mercedes Benz

 

גישה לתכונות בוליאניות של האובייקט

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

echo ($car1 -> hasSunRoof)? 'אין גג נפתח' : 'יש גג נפתח';

 

הוספת מתודות למחלקה

מחלקות בדרך כלל מכילות גם פונקציות, הפונקציות בתוך המחלקות נקראות מתודות. נוסיף את המתודה ()hello למחלקה שיצרנו עם הרשאת הגישה public:

class Car {
         public $comp; 
         public $numWheels = 4;
         public $hasSunRoof = true;
 
         public function hello(){
                 return "beep";
         }
}

 

ניגש למתודה שיצרנו באופן דומה לדרך שבה ניגשים לתכונות. בוא נראה:

echo $car1 -> hello();
echo $car2 -> hello();

בשני המקרים יוחזר beep. שימו לב שכדי לגשת למתודה צריך להוסיף לשם המתודה () כמו שניגשים לפונקציה.

 

דוגמאות למחלקות

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

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

 

לסיכום, הקוד המלא ששימש במדריך:

<?php
// המחלקה
class Car {
// התכונות
         public $comp; 
         public $numWheels = 4;
         public $hasSunRoof = true;
 
// המתודה
         public function hello(){
                 return "beep";
         }
}
 
// יצירת אינסטנסים
$car1 = new Car ();
$car2 = new Car ();
 
// גישה לתכונות
echo $car1 -> numWheels; // 4
echo "<br />";
echo $car2 -> numWheels; // 4
echo "<hr />";
 
$car1 -> numWheels = 5;
$car1 -> comp = "BMW";
$car2 -> comp = "Mercedes Benz";
 
echo $car1 -> numWheels; // 5
echo "<br />";
echo $car2 -> numWheels; // 4
echo "<br />";
echo $car1 -> comp; // BMW
echo "<br />";
echo $car2 -> comp; // Mercedes Benz
echo "<hr />";
 
// שימוש במתודות
echo $car1 -> hello(); // beep
echo "<br />";
echo $car2 -> hello(); // beep
?>

 

המדריך מבוסס על "The essentials of Object Oriented PHP" שמלמד PHP מונחה עצמים באמצעות דוגמאות ותרגילים הקליקו על התמונה כדי לרכוש את ה-eBook:

eBook cover The essentials of Object Oriented PHP

 

במדריך הבא נלמד על מילת המפתח this$, שמאפשרת למתודה לגשת למתודות אחרות ולתכונות בתוך אותה מחלקה.

לכל מדריכי ה-PHP מונחה עצמים

 

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.

המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

איך אומרים בעברית אינטרנט?

 

תמונת המגיב

מני בתאריך: 21.01.2016

למה אני לא יכול לשים בתור תכונה את זה ? private $con = null;

תמונת המגיב

רחל בתאריך: 28.05.2019

נהניתי, תודה