Phương thức tĩnh và Thuộc tính tĩnh trong PHP

Phương thức tĩnh trong PHP

Các phương thức tĩnh có thể được gọi trực tiếp - mà không cần tạo một thể hiện của một lớp.

Các phương thức tĩnh được khai báo với từ khóa static như sau:

<?php
class ClassName {
  public static function staticMethod() {
    echo "Hello World!";
  }
}
?>

Để truy cập một phương thức tĩnh, sử dụng tên lớp rồi đến hai dấu hai chấm (: :) và tên phương thức như sau:

ClassName::staticMethod();

Ví dụ sau minh họa phương thức tĩnh trong PHP:

<?php
class greeting {
  public static function welcome() {
    echo "Hello World!";
  }
}

// Call static method
greeting::welcome();
?>

Đây là kết quả:

Hello World!

Ở đây, chúng tôi khai báo một phương thức tĩnh tên là welcome(). Sau đó, chúng ta gọi phương thức tĩnh bằng cách sử dụng tên lớp rồi đến hai dấu hai chấm (: :) và tên phương thức (không tạo thể hiện của lớp).

Một lớp có thể có cả phương thức tĩnh và không tĩnh. Một phương thức tĩnh có thể được truy cập từ một phương thức trong cùng một lớp bằng cách sử dụng từ khóa self và hai dấu hai chấm (: :) như sau:

<?php
class greeting {
  public static function welcome() {
    echo "Hello World!";
  }

  public function __construct() {
    self::welcome();
  }
}

new greeting();
?>

Đây là kết quả:

Hello World!

Các phương thức tĩnh cũng có thể được gọi từ các phương thức trong các lớp khác. Để làm điều này, phương thức tĩnh phải là public:

<?php
class greeting {
  public static function welcome() {
    echo "Hello World!";
  }
}

class SomeOtherClass {
  public function message() {
    greeting::welcome();
  }
}
?>

Để gọi một phương thức tĩnh từ một lớp con, hãy sử dụng từ khóa parent bên trong lớp con. Ở đây, phương thức tĩnh có thể public hoặc protected.

<?php
class domain {
  protected static function getWebsiteName() {
    return "tech.comdy.vn";
  }
}

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

$domain2 = new domain2;
echo $domain2 -> websiteName;
?>

Đây là kết quả:

tech.comdy.vn

Thuộc tính tĩnh trong PHP

Các thuộc tính tĩnh có thể được gọi trực tiếp - mà không cần tạo một thể hiện của một lớp.

Thuộc tính tĩnh được khai báo với từ khóa static như sau:

<?php
class ClassName {
  public static $staticProp = "W3Schools";
}
?>

Để truy cập một thuộc tính tĩnh, sử dụng tên lớp rồi đến hai dấu hai chấm (: :) và tên thuộc tính như sau:

ClassName::staticProp;

Hãy xem xét một ví dụ:

<?php
class pi {
  public static $value = 3.14159;
}

// Get static property
echo pi::$value;
?>

Đây là kết quả:

3.14159

Ở đây, chúng tôi khai báo một thuộc tính tĩnh là $value. Sau đó chúng tôi xuất ra giá trị của thuộc tính tĩnh bằng cách sử dụng tên lớp rồi đến hai dấu hai chấm (: :) và tên thuộc tính (không khởi tạo đối tượng của lớp).

Một lớp có thể có cả thuộc tính tĩnh và không tĩnh. Một thuộc tính tĩnh có thể được truy cập từ một phương thức trong cùng một lớp bằng cách sử dụng từ khóa self và hai dấu hai chấm (: :) như sau:

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

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

Đây là kết quả:

3.14159

Để gọi một thuộc tính tĩnh từ một lớp con, hãy sử dụng từ khóa parent bên trong lớp con như sau:

<?php
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;
echo "<br />";

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

Đây là kết quả:

3.14159
3.14159


Bài viết liên quan:

Hướng dẫn lập trình PHP toàn tập sẽ giúp bạn từng bước tìm hiểu và nắm vững ngôn ngữ lập trình PHP.

Hướng dẫn cách truy xuất, lọc, sắp xếp dữ liệu MySQL trong PHP sử dụng MySQLi và PDO.

MySQL prepared statements trong PHP rất hữu ích để chống lại các cuộc tấn công SQL Injection.