Tạm thời chưa xét tới các thuộc tính và phương thức tĩnh (với từ khóa static), ta biết rằng có 2 cách để truy xuất class sau khi khởi tạo đối tượng (dùng new class) hoặc truy cập trực tiếp dùng ::.
Xét ví dụ sau:
class Viet{ //Khởi tạo class tên Viet, chú ý tên class là case-sensitive nên //nếu đã có class vieT thì sẽ bị coi là trùng. // 3 thuộc tính của class private $name; public $a = "Thuộc tính a, xin chào "; private $b = "Thuộc tính b, hello "; //hàm gán tên function set_name($ten){ $this->name = $this->b.$ten; } //hàm trả lại tên function get_name(){ return $this->name; } function minhhoa1(){ return "đây là hàm minhoa1()"; // hàm này không gọi biến có trong class } function minhhoa2(){ return $this->a."đây là hàm minhoa2()"; //hàm truyền biến vào } } $object = new Viet; // Khởi tạo một object mới của class $object->set_name("Vượng Nguyễn"); // gán tên theo hàm set_name echo $object->get_name()."<br>"; // xuất tên theo hàm get_name() echo $object->minhhoa1()."<br>";;//kết quả xuất ra: Xin chào, đây là minhoa1() echo $object->minhhoa2()."<br>";;//kết quả xuất ra: Xin chào, đây là minhoa1() echo Viet::minhhoa1()."<br>"; //kết quả xuất ra: Xin chào, đây là hàm minhoa1() echo $object->a; echo Viet::$a; //Fatal error: Uncaught Error: Access to undeclared static property: Viet::$a // từ code dưới trở xuống bị lỗi. echo Viet::minhhoa2()."<br>"; //Fatal error: Uncaught Error: Using $this when not in object context in Viet::set_name("Việt PHP"); //Fatal error: Uncaught Error: Using $this when not in object context echo Viet::get_name();
Kết luận:
- Cách khởi tạo object thông thường, dùng new class là chuẩn nhất. Cách truy xuất tới thuộc tính và phương thức của class dùng -> là chuẩn, nếu ở đây không có thuộc tính và phương thức tĩnh.
- Hàm echo Viet::minhhoa1() có thể truy xuất tới phương thức không chứa thuộc tính của class trong bản thân hàm (dùng từ khóa $this), nhưng lại không thể truy xuất trong trường hợp Viet::minhhoa2().
- Không thể dùng :: truy xuất tới thuộc tính trong class, nó chỉ được dùng cho thuộc tính tĩnh.
Được một đại ca trên daynhauhoc bổ túc, cách dùng :: truy xuất tới non-static elements sắp trở thành quá đát rồi. Đại ca ấy dùng ví dụ sau:
class ABC
{
public function xyz()
{
echo “Oh my girl!”;
}
}
error_reporting(E_ALL);
ABC::xyz();
print_r(error_get_last());
Demo tới: https://3v4l.org/7H4pj