Områdeslösningsoperator (::)

Från Wiki.linux.se
Version från den 18 augusti 2024 kl. 19.06 av Admin (diskussion | bidrag)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

Scope Resolution Operator (::) ¶

Scope Resolution Operator (även kallad Paamayim Nekudotayim) eller, i enklare termer, dubbelkolon, är en token som tillåter åtkomst till en konstant, statisk egenskap eller statisk metod i en klass eller en av dess föräldrar. Dessutom kan statiska egenskaper eller metoder åsidosättas via "late static binding".

När dessa objekt refereras från utanför klassdefinitionen, används namnet på klassen.

Det är möjligt att referera till klassen med en variabel. Variabelns värde kan inte vara ett nyckelord (t.ex. self, parent och static).

Paamayim Nekudotayim skulle vid första anblicken verka som ett märkligt val för att namnge en dubbelkolon. Men när Zend Engine 0.5 (som driver PHP 3) skrevs, bestämde sig Zend-teamet för att kalla den det. Det betyder faktiskt dubbelkolon - på hebreiska!

Exempel #1 :: från utanför klassdefinitionen

<?php
class MyClass {
    const CONST_VALUE = 'Ett konstant värde';
}

$classname = 'MyClass';
echo $classname::CONST_VALUE;

echo MyClass::CONST_VALUE;
?>

Tre speciella nyckelord, self, parent och static, används för att komma åt egenskaper eller metoder inifrån klassdefinitionen.

Exempel #2 :: från inuti klassdefinitionen

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

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

$classname = 'OtherClass';
$classname::doubleColon();

OtherClass::doubleColon();
?>

När en underklass åsidosätter förälderns definition av en metod, kommer PHP inte att anropa förälderns metod. Det är upp till underklassen om förälderns metod ska anropas eller inte. Detta gäller även för Konstruktörer och Destruktörer, Overloading, och Magic-metoddefinitioner.

Exempel #3 Anropa en förälders metod

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

class OtherClass extends MyClass
{
    // Åsidosätt förälderns definition
    public function myFunc()
    {
        // Men anropa fortfarande förälderns funktion
        parent::myFunc();
        echo "OtherClass::myFunc()\n";
    }
}

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

Sidslut

Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php
PHP
Språkreferens
Språkreferens#Klasser_och_Objekt