Menu
Coddy logo textTech

מתודות ומאפיינים סטטיים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 17 מתוך 91.

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

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

<?php
class MathHelper {
    public static function add($a, $b) {
        return $a + $b;
    }
    
    public static function multiply($a, $b) {
        return $a * $b;
    }
}

echo MathHelper::add(5, 3) . "\n";
echo MathHelper::multiply(4, 2);

פלט:

8
8

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

<?php
class Counter {
    private static $count = 0;
    
    public static function increment() {
        self::$count++;
    }
    
    public static function getCount() {
        return self::$count;
    }
}

Counter::increment();
Counter::increment();
echo Counter::getCount();

פלט:

2

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

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

challenge icon

אתגר

קל

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

תיצרו שני קבצים כדי לארגן את הקוד:

  • IdGenerator.php: הגדירו מחלקה בשם IdGenerator שמנהלת יצירה של מזהים ייחודיים באמצעות איברים סטטיים בלבד. למחלקה צריך להיות מאפיין סטטי פרטי $lastId שמתחיל בערך 0, ומאפיין סטטי פרטי $prefix שהערך שלו הוא "ID". צרו שיטה סטטית בשם generate() שמגדילה את המזהה האחרון ומחזירה מחרוזת בפורמט המשלבת את הקידומת והמזהה החדש (למשל "ID1", "ID2" וכן הלאה). הוסיפו שיטה סטטית בשם setPrefix($newPrefix) שמשנה את הקידומת, ושיטה סטטית בשם getLastId() שמחזירה את הערך הנוכחי של $lastId.
  • main.php: כללו את קובץ המחלקה IdGenerator. צרו שני מזהים באמצעות הקידומת שמוגדרת כברירת מחדל והדפיסו כל אחד מהם בשורה נפרדת. לאחר מכן, שנו את הקידומת ל-"USER" באמצעות השיטה הסטטית, צרו שני מזהים נוספים והדפיסו כל אחד מהם. לבסוף, הדפיסו את מספר המזהה האחרון באמצעות קריאה לשיטה הסטטית המתאימה.

זכרו שקוראים לשיטות סטטיות ישירות דרך המחלקה באמצעות ClassName::methodName(), ובתוך המחלקה ניגשים למאפיינים סטטיים באמצעות self::$propertyName. מכיוון שאין מופע של אובייקט, אי אפשר להשתמש ב-$this בשיטות סטטיות.

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

נסו בעצמכם

<?php

// כלול את קובץ המחלקה IdGenerator
require_once 'IdGenerator.php';

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

// TODO: שנה את הקידומת ל-"USER" באמצעות המתודה הסטטית

// TODO: צור שני מזהים נוספים והדפס כל אחד בשורה נפרדת

// TODO: הדפס את המספר של המזהה האחרון באמצעות המתודה הסטטית המתאימה

?>
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר PHP אונליין