Trong một vài trường hợp, bạn có nhu cầu truy cập trực tiếp đến thuộc tính hoặc phương thức mà không muốn tạo đối tượng của lớp thì phương thức Static sẽ giúp bạn. Cùng tìm hiểu nhé.

I. Tìm hiểu về Static trong lập trình hướng đối tượng OOP

1. Static là gì?

Static trong lập trình hướng đối tượng OOP là một thành phần tĩnh có thể là thuộc tính hoặc phương thức.

2. Cách khai báo static

Để khai báo một phương thức hay một thuộc tính static thì ta dùng từ khoá static

class ClassName {
  // Khai báo thuộc tính static
  public static $staticProp = "kiemtientuweb.com";
  // Khai báo phương thức static
  public static function staticMethod() {
    echo "Hello World!";
  }
}

 II. Cách sử dụng phương thức static

Một class có thể có cả phương thức static và phương thức bình thường.

Một phương thức static có thể được truy cập từ một phương thức khác trong cùng một class bằng cách sử dụng từ khóa self và dấu ký tự phạm vi ::

class Hello {
  public static function welcome() {
    echo "Hello World!";
  }

  public function __construct() {
    self::welcome(); //Cách 1
    Hello::welcome(); //Cách 2
  }
}

new Hello();

Các phương thức static cũng có thể được gọi từ các phương thức khác trong các lớp khác. Tuy nhiên phương thức static phải có phạm vi truy cập là public.

class Hello {
  public static function welcome() {
    echo "Hello World!";
  }
}

class Hi {
  public function message() {
    Hello::welcome();
  }
}

Để gọi một phương thức static từ một class con, ta sử dụng từ khóa parent bên trong class con. Và tất nhiên phương thức static phải có phạm vi truy cập public hoặc protected.

class Domain {
  protected static function getWebsiteName() {
    return "kiemtientuweb.com";
  }
}

class MyDomain extends Domain {
  public $websiteName;
  public function __construct() {
    $this->websiteName = parent::getWebsiteName();
  }
}

$my_domain = new MyDomain();
echo $my_domain ->websiteName;

III. Cách sử dụng thuộc tính static

Tương tự như phương thức static thì ta cũng có một class có thể có cả thuộc tính static và thuộc tính bình thường.

Một thuộc tính static có thể được truy cập từ một phương thức khác trong cùng một class bằng cách sử dụng từ khóa self và dấu ký tự phạm vi ::

class pi {
  public static $value=3.14159;
  public function staticValue() {
    return self::$value;
  }
}

$pi = new pi();
echo $pi->staticValue();

Để gọi một thuộc tính static từ một class con được kế thừa, ta sử dụng từ khóa parent bên trong class con. 

class pi {
  public static $value=3.14159;
}

class x extends pi {
  public function xStatic() {
    return parent::$value;
  }
}

// Get value of static property directly via child class
echo x::$value;

// or get value of static property via xStatic() method
$x = new x();
echo $x->xStatic();

Tóm lại có 3 cách gọi một thuộc tính và phương thức static

  • Gọi thuộc tính static hay phương thức static trong phương thức bình thường cùng class thì dùng từ khoá self :: hoặc tên class::
  • Gọi thuộc tính static hay phương thức static ngoài các class không liên quan nhau thì dùng tên class::
  • Gọi thuộc tính static hay phương thức static bên trong class được thừa kế thì dùng từ khoá parent ::

Lưu ý: Thuộc tính static hoạt động như một biến toàn cục, dù cho nó có được xử lý ở trong bất kỳ một file nào đi nữa (trong cùng một chương trình) thì nó đều lưu lại giá trị cuối cùng mà nó được thực hiện vào trong class. Xem 2 ví dụ dưới để hiểu hơn.

Ví dụ ta có đoạn mã sau không sử dụng static

class Person
{
    private $name = 'Ha Anh Tuan';

    public function setName($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }
}

//Khởi tạo đối tượng person
$person = new Person();
$person->setName('Hoàng Thuỳ Linh');
echo $person->getName();   //Kết quả: Hoàng Thuỳ Linh

//khởi tạo thêm 1 đối tượng khác
$student = new Person();
echo $student->getName();  // Kết quả: Ha Anh Tuan

Và đoạn mã có sử dụng static

class Person
{
    private static $name = 'Ha Anh Tuan';

    public function setName($name)
    {
        self::$name = $name;
    }

    public function getName()
    {
        return self::$name;
    }
}

//Khởi tạo đối tượng person
$person = new Person();
$person->setName('Hoàng Thuỳ Linh');
echo $person->getName();   //Kết quả: Hoàng Thuỳ Linh

//khởi tạo thêm 1 đối tượng khác
$student = new Person();
echo $student->getName();  // Kết quả:  Hoàng Thuỳ Linh
Ngọc Phương

Web Developer

Cảm ơn các bạn đã ghé thăm blog của tôi. Tôi tên là Phương và tôi đã có hơn 10 năm kinh nghiệm trong lĩnh vực phát triển website. Tôi tự tin khẳng định mình là chuyên gia trong việc tạo ra những trang web ấn tượng và hiệu quả. Bạn nào có nhu cầu thiết kế website có thể liên hệ cho tôi qua zalo 0935040740.

0 nhận xét

Tìm kiếm
Mạng xã hội
Quảng cáo