PHP: Toán tử ::

Toán tử (::) dùng để truy cập các thành phần static và hằng, nó cũng có tác dụng ghi đè các thuộc tính và phương thức của lớp.

Khi sử dụng toán tử này ngoài lớp thì ta đi kèm với tên của lớp đó.

Phiên bản PHP 5.3.0 cho phép tham chiếu tới lớp bằng cách sử dụng một biến, trong đó giá trị của biến không được là một từ khóa (self, parent và static).

Ví dụ 1: Sử dụng :: bên ngoài định nghĩa lớp.

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

$classname = 'MyClass';
echo $classname::CONST_VALUE; // PHP 5.3.0

echo MyClass::CONST_VALUE;
?>

Ba từ khóa đặc biệt self, parent và static được dùng để truy cập các thuộc tính hoặc phương thức từ bên trong định nghĩa lớp.

Ví dụ 2: Sử dụng :: bên trong định nghĩa lớp.

<?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';
echo $classname::doubleColon(); // PHP 5.3.0

OtherClass::doubleColon();
?>

Khi lớp con ghi đè một phương thức của lớp cha thì PHP sẽ không gọi phương thức của lớp cha. Điều này có nghĩa từ lớp con có thể gọi hoặc không gọi được phương thức của lớp cha. Điều này cũng được áp dụng cho Hàm tạo và Hàm hủy, Tải chồng, và Magic methods.

Ví dụ 3: Gọi phương thức của lớp cha.

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

class OtherClass extends MyClass
{
    // Ghi đè phương thức của lớp cha
    public function myFunc()
    {
        // Nhưng vẫn có thể gọi phương thức đó của lớp cha
        parent::myFunc();
        echo "OtherClass::myFunc()\n";
    }
}

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