נגישות       נגישות
שינוי גודל טקסט:
א א א
שינוי צבעי האתר:
? מקשי קיצור:

לחיצה חוזרת ונשנית על המקש Tab תעביר אתכם בין הקישורים והאזורים השונים בעמוד.

הפעלת מקשי הקיצור תלויה בדפדפן שבו אתם משתמשים.

Internet Explorer, Chrome ובגרסאות ישנות של Firefox: לחצו על מקש Alt ועל מקש המספר או האות על-פי הרשימה. ב Firefox 3 ומעלה: לחצו על המקשים Alt + Shift + המספר או האות.

S - עבור לתוכן הדף
L - חיפוש
1- עמוד הבית
2 - פרוייקטים
3 - מדריכים
4 - אודות
5 - צרו קשר
6 - הצהרת נגישות
 

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

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

תכנות מונחה עצמים הוא סגנון תכנות שבו נהוג לקבץ את כל המשתנים והפונקציות של נושא מסוים בתוך מחלקה (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 מונחה עצמים

 

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

 

= 9 + 8

תמונת המגיב

מני בתאריך: 21.01.2016

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