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(), თუ საჭიროა გვიან სტატიკური ბმული.