גישה לשינויים ב-PHP

SSL מהימן החל מ-$3.44 בלבד
פרסומות
בנאים והרסים ב-PHP
ירושה ב-PHP OOP

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

גישה לסוגי שינוי ב-PHP

ב-PHP, משנה גישה מסווגים כציבוריים, פרטיים או מוגנים.

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

דוגמאות

class Person{
  public $name;
  protected $age;
  private $height;
}

$x= new Person();
$x->name = 'John'; // OK
$x->age= '32'; // ERROR
$x->height= '5.4'; // ERROR

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

שיטות ציבוריות, פרטיות ומוגנות

class Person{
  public $name;
  public $age;
  public $height;

  function set_name($n) {  // a public function (default)
    $this->name = $n;
  }
  protected function set_age($a) { // a protected function
    $this->age = $a;
  }
  private function set_height($h) { // a private function
    $this->height = $h;
  }
}

$person = new Person();
$person->set_name('John'); // OK
$person->set_age('26'); // ERROR
$person->set_height('5.4'); // ERROR

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

משנה גישה מתקדמת: תקציר וסופי

PHP מספקת משנה גישה מתוחכמת בשם "מופשט" ו"סופית" בנוסף לשינויי הגישה הרגילים.

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

דוגמאות

abstract class Bike {

    private $maxSpeed = 80;

    // Simple method
    public function drivingSpeed() {
        return "Driving at " . $this->maxSpeed . " kilometer/hour";
    }

    // Abstract method
    abstract public function drive();
}

class Police extends Bike {

    public function drive() {
        return "Driving out of speed limit.";
    }

}

$bike= new Police();
echo $bike->drivingSpeed();

בדוגמה למעלה, אנו בונים א תַקצִיר מחלקה בשם "אופניים" שיש לה פונקציה מופשטת בשם "drive()". בשלב הבא אנחנו בונים כיתה חדשה בשם "משטרה", אשר משתרע מחלקה "Bike" ומיישם את הפונקציה "drive()". אנו משתמשים במחלקה "משטרה" במקום זאת מכיוון שאיננו יכולים לבנות אובייקט של המחלקה המופשטת.

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

שאלות ותשובות

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

SSL מהימן החל מ-$3.44 בלבד
פרסומות

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

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

ש: האם אתה יכול לתת דוגמה לשימוש בשינוי גישה מופשט ב-PHP?

abstract class Bike {
    private $maxSpeed = 80;
    abstract public function drive();
}
class Police extends Bike {
    public function drive() {
        return "Driving out of speed limit.";
    }
}

בדוגמה שלמעלה, אנו בונים מחלקה מופשטת בשם "Bike" שיש לה פונקציה מופשטת בשם "drive()". בשלב הבא אנו בונים מחלקה חדשה בשם "Police", שמרחיבה את מחלקה "Bike" ומיישמת את הפונקציה "drive()". אנו משתמשים במחלקה "משטרה" במקום זאת מכיוון שאיננו יכולים לבנות אובייקט של המחלקה המופשטת.

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

תרגילים:

  1. מהו שינוי הגישה המוגדר כברירת מחדל ב-PHP?
  2. מה ההבדל בין מתני גישה פרטיים ומוגנים ב-PHP?
  3. תן דוגמה לשימוש בשינוי גישה מופשט ב-PHP.
  4. כיצד פועל משנה הגישה הסופית?
  5. האם אתה יכול ליצור אובייקט של מחלקה מופשטת? למה או למה לא?
  6. האם אתה יכול לעקוף שיטה סופית בכיתת ילדים? למה או למה לא?
  7. האם אתה יכול להקצות ערך לתכונה פרטית מחוץ למחלקה שבה היא נוצרה? למה או למה לא?
  8. האם ניתן לגשת למתודה מוגנת מחוץ למחלקה שבה היא נוצרה? למה או למה לא?

תשובות:

  1. ברירת המחדל של שינוי הגישה ב-PHP הוא ציבורי.
  2. ניתן לגשת למתודה או תכונה פרטית ב-PHP רק בתוך המחלקה שבה היא נוצרה, בעוד למתודה או תכונה מוגנת ניתן לגשת בתוך המחלקה שבה היא נוצרה, כמו גם במחלקות שיורשות מאותה מחלקה.
abstract class Bike {
    private $maxSpeed = 80;
    abstract public function drive();
}
class Police extends Bike {
    public function drive() {
        return "Driving out of speed limit.";
    }
}

4. ניתן להחיל את שינוי הגישה הסופי על מחלקות, שיטות ומאפיינים. הוא משמש כדי למנוע מחלקה להיות מורחבת או לעקוף מתודה.
5. לא, אנחנו לא יכולים ליצור אובייקט של מחלקה אבסטרקטית כי מחלקה מופשטת משמשת כתוכנית למחלקות אחרות ואין לה בנאי ליצירת אובייקט.
6. לא, לא נוכל לעקוף שיטה סופית בכיתת ילד מכיוון שהיא מסומנת כסופית ולא ניתן לעקוף אותה.
7. לא, אנחנו לא יכולים לספק ערך לתכונה פרטית מחוץ למחלקה שיצרה אותה מכיוון שהתכונה זמינה רק בתוך המחלקה.
8. לא, לא ניתן לגשת למתודה מוגנת מחוץ למחלקה שיצרה אותה, אך ניתן לגשת אליה מחלקות הנובעות ממחלקה זו.

בנאים והרסים ב-PHP
ירושה ב-PHP OOP
close

הישאר מעודכן לגבי PHP!

אנחנו לא שולחים ספאם!

SSL מהימן החל מ-$3.44 בלבד
פרסומות

en English
X
גלול למעלה