[Bài đọc] Phương thức static và thuộc tính static
NỘI DUNG BÀI VIẾT
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