post-image

[Bài đọc] Phương thức static và thuộc tính static

Lập trình Hướng Đối tượng

Khi sử dụng từ khoá static với các thành phần của một lớp thì chúng có thể được truy cập thông qua tên của lớp mà không cần khởi tạo đối tượng. Một thuộc tính static thì không thể được truy cập thông qua một đối tượng của lớp đó, nhưng một phương thức static thì có thể được gọi thông qua một đối tượng của lớp.

Phương thức static

Bởi vì một phương thức static thì có thể gọi thông qua tên lớp (mà không thông qua một đối tượng cụ thể), do đó từ khoá $this sẽ không được phép sử dụng trong các phương thức static này.

Ví dụ:

<?php
class Foo {
    public static function aStaticMethod() {
        // ...
    }
}

Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // As of PHP 5.3.0
?>

Thuộc tính static

Thuộc tính static thì không thể truy cập thông qua một đối tượng và sử dụng toán từ ->.

Ví dụ:

<?php
class Foo
{
    public static $my_static = 'foo';

    public function staticValue() {
        return self::$my_static;
    }
}

class Bar extends Foo
{
    public function fooStatic() {
        return parent::$my_static;
    }
}


print Foo::$my_static . "\n";

$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n";      // Undefined "Property" my_static 

print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n"; // As of PHP 5.3.0

print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>

Lưu ý: Từ khoá self được sử dụng để thay cho tên lớp hiện tại.

Kết luận

Chúng ta cần phân biệt rõ các thành phần thuộc phạm vi của lớp (class members) và các thành phần thuộc phạm vi của đối tượng (object members). 

Những thuộc tính và phương thức bình thường (không có từ khoá static) thì thuộc phạm vi của một đối tượng, chúng còn được gọi là instance variable (biến của đối tượng) và instance method (phương thức của đối tượng). Các thành phần này có thể được truy cập thông qua một đối tượng cụ thể của lớp đó. Bên trong  method thì có thể sử dụng $this.

Những thuộc tính và phương thức static thì thuộc phạm vi của một lớp, chúng còn được gọi là class variable (biến của lớp) và class method (phương thức của lớp). Các thành phần này có thể được truy cập thông qua tên lớp. Bên trong phương thức static thì không thể sử dụng $this.

Leave a Reply

Your email address will not be published.