מאפיינים פרטיים ומוגנים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 18 מתוך 91.
עד כה השתמשנו במאפייני public שאפשר לגשת אליהם מכל מקום. אבל לפעמים צריך להגביל את הגישה כדי להגן על הנתונים שלך. PHP מספקת שני מצייני נראות נוספים: private ו-protected.
ניתן לגשת למאפיין private רק מתוך המחלקה שמגדירה אותו:
<?php
class BankAccount {
private $balance = 0;
public function deposit($amount) {
$this->balance += $amount;
}
public function getBalance() {
return $this->balance;
}
}
$account = new BankAccount();
$account->deposit(100);
echo $account->getBalance();
פלט:
100ניסיון לגשת ישירות אל $account->balance מחוץ למחלקה יגרום לשגיאה. כך היתרה מוגנת מפני שינוי ללא שימוש בשיטה deposit.
מאפיין protected פועל באופן דומה, אך גם מחלקות צאצא שמרחיבות את מחלקת האב יכולות לגשת אליו:
<?php
class User {
protected $email;
public function __construct($email) {
$this->email = $email;
}
}
class Admin extends User {
public function showEmail() {
return $this->email;
}
}
$admin = new Admin("admin@example.com");
echo $admin->showEmail();
פלט:
admin@example.comנקודה חשובה: השתמשו ב-private כאשר רק המחלקה שמגדירה את המאפיין צריכה לגשת אליו. השתמשו ב-protected כאשר גם מחלקות יורשות צריכות לגשת אליו. שניהם מונעים גישה ישירה מבחוץ, וכך שומרים על המצב הפנימי של האובייקט שלכם.
אתגר
קלבואו נבנה מערכת מאובטחת לניהול עובדים, שמדגימה איך להגן על נתונים רגישים באמצעות מאפיינים פרטיים ומוגנים.
תיצרו שלושה קבצים שישתפו פעולה כדי לנהל את פרטי העובדים עם בקרת גישה מתאימה:
Employee.php: הגדירו מחלקה בשםEmployeeשתשמש כמחלקת בסיס לכל העובדים. צריכה להיות לה תכונהprotected $name(כדי שמחלקות יורשות יוכלו לגשת אליה) ותכונהprivate $salary(רק המחלקה הזאת צריכה לשנות משכורות ישירות). הבנאי מקבל שם ומשכורת ומגדיר את שתי התכונות. הוסיפו מתודה ציבוריתgetName()שמחזירה את השם, מתודה ציבוריתgetSalary()שמחזירה את המשכורת, ומתודה ציבוריתgiveRaise($amount)שמגדילה את המשכורת בסכום הנתון.Manager.php: הגדירו מחלקה בשםManagerשיורשת מ-Employee. כללו את קובץ Employee בתחילת הקובץ. הוסיפו תכונה פרטית$department. הבנאי צריך לקבל שם, משכורת ומחלקה: לקרוא לבנאי של מחלקת האב באמצעותparent::__construct($name, $salary), ואז להגדיר את המחלקה. צרו מתודהgetDetails()שמחזירה"[name] manages [department]"באמצעות גישה ישירה לתכונה המוגנת$name. הוסיפו גם מתודהgetDepartment()שמחזירה את המחלקה.main.php: כללו את שני קובצי המחלקות. צרו מופע שלManagerעם השם"Sarah", משכורת75000ומחלקה"Engineering". הדפיסו את הפרטים של המנהל באמצעותgetDetails(). לאחר מכן תנו למנהל העלאה של5000והדפיסו את המשכורת החדשה שלו באמצעותgetSalary(). כל פלט צריך להופיע בשורה נפרדת.
שימו לב שמחלקת Manager יכולה לגשת ישירות לתכונה המוגנת $name, אבל כדי לגשת למשכורת הפרטית היא חייבת להשתמש במתודה getSalary(). הדבר מדגים את ההבדל המרכזי בין הרשאות protected ו-private: הרשאת protected מאפשרת למחלקות יורשות לגשת לתכונה, ואילו הרשאת private משאירה את הנתונים מוסתרים באמת.
נסו בעצמכם
<?php
require_once 'Employee.php';
require_once 'Manager.php';
// TODO: צרו Manager בשם "Sarah", עם שכר של 75000 ובמחלקה "Engineering"
// TODO: הדפיסו את פרטי המנהל באמצעות getDetails()
// TODO: העניקו למנהל העלאה של 5000
// TODO: הדפיסו את השכר החדש באמצעות getSalary()
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח $thisמתודותמאפייניםבנאי (__construct)הורס (__destruct)חזרה: מחשבון פשוט4ירושה
ירושה בסיסיתמילת המפתח parent::דריסת מתודותמילת המפתח finalמחלקות מופשטותסיכום – היררכיית עובדים7כימוס
ציבורי, מוגן, פרטימפרטי גישה לעומקמתודות גישה ועדכוןהסתרת מידעקידום פרמטרים בבנאי (8.0)סיכום – מערכת רישומי תלמידים2מרחבי שמות וטעינה אוטומטית
מבוא למרחבי שמותמילת המפתח useתקן הטעינה האוטומטית PSR-4הטוען האוטומטי של Composerסיכום – פרויקט מאורגן5ממשקים וחוזים
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםממשק לעומת מחלקה מופשטתרמזי טיפוסים עם ממשקיםסיכום - מחשבון צורות8מתודות קסם
מבוא למתודות קסם__toString ו־__debugInfo__get, __set, __isset, __unset__call ו־__callStatic__clone ושיבוט אובייקטים__serialize ו־__unserializeסיכום – אוסף מותאם אישית3מאפייני מחלקה
מאפייני מופע לעומת מאפיינים סטטייםקבועים במחלקותמתודות ומאפיינים סטטייםמאפיינים פרטיים ומוגניםמאפיינים לקריאה בלבד (PHP 8.1)סיכום – מנהל חשבון בנק6פולימורפיזם
בחינה מחדש של דריסת מתודותפולימורפיזם באמצעות ממשקיםרמזי טיפוסים וטיפוסי איחודקישור סטטי מאוחרסיכום — מעבד תשלומיםתרגלו בעצמכם: קומפיילר PHP אונליין