Sobes.tech
Junior — Middle

Τι συμβαίνει αν σε μια υποκλάση καλέσουμε μια μέθοδο που δεν έχει οριστεί σε αυτήν, μέσω κλήσης με self::;

sobes.tech AI

Απάντηση από AI

Στην PHP, η λέξη-κλειδί self:: αναφέρεται πάντα στην κλάση στην οποία γράφεται, και όχι στην υποκλάση. Αν σε μια υποκλάση καλέσετε μια μέθοδο μέσω self::, η οποία δεν ορίζεται στην ίδια την υποκλάση αλλά στην γονική κλάση, η PHP θα προσπαθήσει να την βρει ακριβώς στην υποκλάση και δεν θα την βρει, οδηγώντας σε σφάλμα.

Παράδειγμα:

class ParentClass {
    public static function foo() {
        echo "Parent foo";
    }
}

class ChildClass extends ParentClass {
    public static function bar() {
        self::foo(); // Προσπάθεια κλήσης της foo() μέσω self:: στην ChildClass
    }
}

ChildClass::bar(); // Σφάλμα: Call to undefined method ChildClass::foo()

Για να καλέσετε τη μέθοδο της γονικής κλάσης, πρέπει να χρησιμοποιήσετε parent::foo() ή static::foo(), αν απαιτείται καθυστερημένη στατική σύνδεση.