عامل تحليل النطاق (::) في PHP

من موسوعة حسوب
< PHP
(بالتحويل من PHP/OOP/scope-operator)

يسمح عامل تحليل النطاق (Scope Resolution Operator) بالوصول إلى الخاصيات والتوابع من نوع static، أو المتجاوز عليها أو الثوابت الخاصة بصنف معين.

يجب استخدام اسم الصنف عند الإشارة إلى هذه العناصر من خارج الصنف.

منذ الإصدار 5.3.0 من اللغة أصبح بالإمكان الإشارة إلى الصنف باستخدام متغير، ولا يمكن أن يحمل المتغير قيمة تمثّل كلمة مفتاحية (مثل self، و parent، و static).

المثال 1: استخدام الرمز :: من خارج الصنف

<?php
class MyClass {
    const CONST_VALUE = 'A constant value';
}

$classname = 'MyClass';
// منذ الإصدار 5.3.0
echo $classname::CONST_VALUE; 

echo MyClass::CONST_VALUE;
?>

تستخدم الكلمات المفتاحية الخاصة الثلاث self، و parent، و static للوصول إلى الخاصيات والتوابع من داخل الصنف.

المثال 2: استخدام الرمز :: من داخل الصنف

<?php
class OtherClass extends MyClass
{
    public static $my_static = 'static var';

    public static function doubleColon() {
        echo parent::CONST_VALUE . "\n";
        echo self::$my_static . "\n";
    }
}

$classname = 'OtherClass';
// منذ الإصدار 5.3.0
$classname::doubleColon(); 

OtherClass::doubleColon();
?>

عندما يتجاوز صنف موسَّع على تعريف أحد التوابع في الصنف الأب، لن تستدعي اللغة تابع الصنف الأب، ويعتمد أمر استدعاء التابع الأب من عدمه على الصنف الموسَّع. ينطبق هذا الأمر أيضًا على تعريفات التوابع البانية والهادمة، وزيادة التحميل Overloading والتوابع السحرية.

المثال 3: استدعاء تابع في الصنف الأب

<?php
class MyClass
{
    protected function myFunc() {
        echo "MyClass::myFunc()\n";
    }
}

class OtherClass extends MyClass
{
    // يتجاوز تعريف التابع في الصنف الأب
    public function myFunc()
    {
        // ولكن ما زال الاستدعاء للدالة في الصنف الأب
        parent::myFunc();
        echo "OtherClass::myFunc()\n";
    }
}

$class = new OtherClass();
$class->myFunc();
?>

راجع أيضًا بعض الأمثلة على استدعاء توابع من نوع static.

مصادر