Tĩnh hay không tĩnh?
Bạn đã bao giờ tự hỏi mình câu hỏi này?
Bạn không thể truy cập các tham số / phương thức không tĩnh từ phương pháp tĩnh bên trong [ít nhất là không sử dụng tiêm phụ thuộc]
Tuy nhiên, bạn có thể truy cập các thuộc tính và phương thức tĩnh từ phương thức không tĩnh [với
self::
]
Đặc tính
Giá trị thuộc tính cụ thể có được gán cho bản thiết kế lớp hay đúng hơn là đối tượng [được tạo đối tượng từ một lớp] không? Nếu giá trị không chặt chẽ với thể hiện lớp [đối tượng lớp] thì bạn có thể khai báo nó dưới dạng thuộc tính tĩnh.then you could declare it as as static property.
private static $objectCreatedCount; // this property is assign to class blueprint
private $objectId; // this property is assign explicitly to class instance
Phương pháp
Khi quyết định tạo một phương pháp tĩnh hoặc không tĩnh, bạn cần tự hỏi mình một câu hỏi đơn giản. Phương pháp này có cần sử dụng $this
không? Nếu nó làm, thì nó không nên được tuyên bố là tĩnh.it should not be declared as static.
Và chỉ vì bạn không cần $ từ khóa này không tự động có nghĩa là bạn nên tạo một cái gì đó tĩnh [mặc dù điều ngược lại là đúng: nếu bạn cần $ điều này, hãy làm cho nó không tĩnh].
Bạn đang gọi phương thức này trên một đối tượng riêng lẻ hoặc trên lớp nói chung? Nếu bạn không chắc chắn nên sử dụng cái nào vì cả hai đều phù hợp với trường hợp sử dụng cụ thể, thì luôn luôn sử dụng không tĩnh. Nó sẽ cung cấp cho bạn sự linh hoạt hơn trong tương lai.
Thực tiễn tốt là luôn bắt đầu thiết kế lớp học của bạn dưới dạng tĩnh và lực tĩnh nếu trường hợp cụ thể của Hoa Kỳ trở nên rất rõ ràng.
Bạn có thể cố gắng khai báo các tham số của mình là tĩnh ... chỉ để bạn có thể truy cập nó từ phương thức tĩnh nhưng đó thường không phải là điều bạn muốn làm. Vì vậy, nếu bạn thực sự cần truy cập $this
từ phương thức tĩnh thì điều đó có nghĩa là bạn cần suy nghĩ lại/thiết kế lại kiến trúc lớp của mình vì bạn đã không sai.because you have don it wrong.
Bạn truy cập các biến toàn cầu trong các phương thức tĩnh giống hệt như cách bạn truy cập chúng trong bất kỳ chức năng nào khác. Bằng cách sử dụng $ Globals hoặc bằng cách sử dụng Tuyên bố toàn cầu.
PHP có biến tĩnh không?
Giới thiệu: Một lớp tĩnh trong PHP là một loại lớp chỉ được khởi tạo một lần trong một chương trình. Nó phải chứa một thành viên tĩnh [biến] hoặc hàm thành viên tĩnh [phương thức] hoặc cả hai. Các biến và phương thức được truy cập mà không cần tạo một đối tượng, sử dụng toán tử phân giải phạm vi [: :].
Mẹo
Trang này mô tả việc sử dụng từ khóa static
để xác định các phương thức và thuộc tính tĩnh. static
cũng có thể được sử dụng để xác định các biến tĩnh và cho các ràng buộc tĩnh muộn. Vui lòng tham khảo các trang đó để biết thông tin về những ý nghĩa của static
.
Khai báo các thuộc tính hoặc phương thức lớp là tĩnh giúp chúng có thể truy cập mà không cần khởi tạo lớp. Chúng cũng có thể được truy cập thống kê trong một đối tượng lớp khởi tạo.
Phương pháp tĩnhError.
Bởi vì các phương thức tĩnh có thể gọi được mà không có một thể hiện của đối tượng được tạo ra, nên việc biến giả $ này không có sẵn bên trong các phương thức được khai báo là tĩnh.E_DEPRECATED
warning.
Cảnh báo
Gọi các phương thức phi tĩnh là ném một lỗi.
Trước PHP 8.0.0, việc gọi các phương thức phi tĩnh được tính không thể dùng được và tạo ra cảnh báo E_DEPRECATED
.
Ví dụ #1 Phương pháp tĩnh ví dụ
Tính chất tĩnh
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo5
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo6
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo7
Các thuộc tính tĩnh được truy cập bằng toán tử phân giải phạm vi [
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo0] và không thể được truy cập thông qua toán tử đối tượng [
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo1].
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo
Có thể tham chiếu lớp bằng một biến. Giá trị của biến không thể là một từ khóa [ví dụ: foo
foo
Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23
Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23
foo
foo
foo
foo
2, foo
foo
Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23
Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23
foo
foo
foo
foo
3 và static
]. ¶
17 năm trước
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo8
Vvikramraj tại Yahoo Dot Com ¶ ¶
14 năm trước
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo9
self::
0
self::
1
self::
2Mathijs vos ¶ ¶
fakhar_anwar123 tại hotmail dot com ¶
self::
3
2 năm trước ¶
14 năm trước
self::
4
self::
5
self::
6
self::
7Mathijs vos ¶ ¶
8 năm trước
self::
8
self::
9
$this
0
$this
1
$this
2
$this
3
$this
4
$this
5Mathijs vos ¶ ¶
fakhar_anwar123 tại hotmail dot com ¶
$this
6
$this
7
$this
52 năm trước ¶
fakhar_anwar123 tại hotmail dot com ¶
$this
9
$this
0
$this
1
$this
2
self::
6
$this
42 năm trước ¶
Làm thế nào có thể sử dụng biến tĩnh trong lớp trong PHP?
$this
5
$this
6
$this
7
$this
5Từ khóa tĩnh được sử dụng để khai báo các thuộc tính và phương thức của một lớp là tĩnh. Các thuộc tính và phương thức tĩnh có thể được sử dụng mà không tạo ra một thể hiện của lớp. Từ khóa tĩnh cũng được sử dụng để khai báo các biến trong một hàm giữ giá trị của chúng sau khi hàm kết thúc. ¶
Làm thế nào có thể sử dụng biến tĩnh trong lớp trong PHP?
$this
9
static
0
static
1
$this
5Từ khóa tĩnh được sử dụng để khai báo các thuộc tính và phương thức của một lớp là tĩnh. Các thuộc tính và phương thức tĩnh có thể được sử dụng mà không tạo ra một thể hiện của lớp. Từ khóa tĩnh cũng được sử dụng để khai báo các biến trong một hàm giữ giá trị của chúng sau khi hàm kết thúc. ¶
Làm thế nào tôi có thể truy cập biến tĩnh riêng trong PHP?
static
3
static
4
static
5
static
6Các thuộc tính tĩnh được truy cập bằng toán tử phân giải phạm vi [::] và không thể được truy cập thông qua toán tử đối tượng [ ->]. Có thể tham chiếu lớp bằng một biến. Giá trị của biến không thể là một từ khóa [ví dụ: tự, cha mẹ và tĩnh]. ¶
14 năm trước
static
7
static
8
static
9
static
0Mathijs vos ¶ ¶
12 năm trước
static
1
static
2
static
3
static
4fakhar_anwar123 tại hotmail dot com ¶ ¶
Valentin tại Balt Dot Tên ¶
static
5
static
6
static
7
static
8
static
9
$this
5jkenigso tại utk dot edu ¶ ¶
17 năm trước
static
1
static
2
static
3
static
4
static
5
static
6
static
7
static
8
static
9
E_DEPRECATED
0
E_DEPRECATED
1
E_DEPRECATED
2
$this
5Vvikramraj tại Yahoo Dot Com ¶ ¶
14 năm trước
E_DEPRECATED
4
self::
6
E_DEPRECATED
6Mathijs vos ¶ ¶
17 năm trước
E_DEPRECATED
7
E_DEPRECATED
8
E_DEPRECATED
9
0Vvikramraj tại Yahoo Dot Com ¶ ¶
14 năm trước
1
2
3Michalf tại ncac dot torun dot pl ¶ ¶
17 năm trước
4
5
self::
6
7Jay Cain ¶ ¶
12 năm trước
8
9
2
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo01
Mirco ¶ ¶
12 năm trước
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo02
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo03
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo04
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo05
self::
6
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo07
Mirco ¶ ¶
12 năm trước
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo08
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo09
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo10
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo11
Mirco ¶ ¶
Valentin tại Balt Dot Tên ¶
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo12
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo13
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo14
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo15
jkenigso tại utk dot edu ¶ ¶
17 năm trước
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo16
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo17
self::
6
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo19
Jay Cain ¶ ¶
12 năm trước
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo20
Mirco ¶ ¶
12 năm trước
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo21
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo10
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo23
Mirco ¶ ¶
Valentin tại Balt Dot Tên ¶
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo24
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo25
$this
5