Các biến có "phạm vi" giới hạn hoặc "những nơi mà chúng có thể truy cập được". Chỉ vì bạn đã viết
Rất đơn giản. PHP có phạm vi chức năng. Đó là loại phân tách phạm vi duy nhất tồn tại trong PHP. Các biến bên trong một hàm chỉ khả dụng bên trong hàm đó. Các biến bên ngoài hàm có sẵn ở mọi nơi bên ngoài hàm, nhưng không có bên trong bất kỳ hàm nào. Điều này có nghĩa là có một phạm vi đặc biệt trong PHP. phạm vi toàn cầu. Bất kỳ biến nào được khai báo bên ngoài bất kỳ hàm nào đều nằm trong phạm vi toàn cầu này
4 thuộc phạm vi toàn cục, 7 thuộc phạm vi cục bộ bên trong 8. Chỉ mã bên trong 8 mới có quyền truy cập vào 7. Chỉ mã bên ngoài 8 mới có quyền truy cập vào 4. Không có quyền truy cập vào khácMã 3d áp dụng cho bất kỳ mã nào khác. chỉ có phạm vi riêng biệt của 4s. Với mục đích về phạm vi, bạn có thể nghĩ đến việc bao gồm các tệp như sao chép và dán mãc. php
5 được đưa vào bên trong 8, bất kỳ biến nào bên trong 7 chỉ có phạm vi chức năng cục bộ. Chỉ vì chúng có vẻ nằm trong phạm vi toàn cầu trong 7 không nhất thiết có nghĩa là chúng đúng như vậy, nó thực sự phụ thuộc vào ngữ cảnh mà mã đó được bao gồm/thực thi trongCòn các hàm bên trong hàm và lớp thì sao?
Mỗi khai báo
4 mới giới thiệu một phạm vi mới, thật đơn giản(ẩn danh) chức năng bên trong chức năng
function foo() {
$foo = 'bar';
$bar = function () {
// no access to $foo
$baz = 'baz';
};
// no access to $baz
}
các lớp học
$foo = 'foo';
class Bar {
public function baz() {
// no access to $foo
$baz = 'baz';
}
}
// no access to $baz
Phạm vi tốt cho là gì?
Xử lý các vấn đề về phạm vi có vẻ khó chịu, nhưng phạm vi biến giới hạn là điều cần thiết để viết các ứng dụng phức tạp. Nếu mọi biến bạn khai báo sẽ có sẵn từ mọi nơi khác trong ứng dụng của bạn, thì bạn sẽ lướt qua tất cả các biến của mình mà không có cách nào thực sự để theo dõi những thay đổi nào. Chỉ có rất nhiều tên hợp lý mà bạn có thể đặt cho các biến của mình, có thể bạn muốn sử dụng biến "
0" ở nhiều nơi. Nếu bạn chỉ có thể có tên biến duy nhất này một lần trong ứng dụng của mình, bạn sẽ phải sử dụng các lược đồ đặt tên thực sự phức tạp để đảm bảo các biến của bạn là duy nhất và bạn không thay đổi biến sai từ đoạn mã saiQuan sát
function foo() {
echo $bar;
}
Nếu không có phạm vi, chức năng trên sẽ làm gì? . Điều này đưa chúng ta đến
Vượt qua ranh giới phạm vi
đúng cách. truyền biến vào và ra
function foo($bar) {
echo $bar;
return 42;
}
Biến
1 rõ ràng đi vào phạm vi này dưới dạng đối số hàm. Chỉ cần nhìn vào chức năng này, rõ ràng các giá trị mà nó hoạt động bắt nguồn từ đâu. Sau đó, nó trả về một giá trị rõ ràng. Người gọi có đủ tự tin để biết hàm sẽ làm việc với những biến nào và giá trị trả về của nó đến từ đâu$baz = 'baz';
$blarg = foo($baz);
Mở rộng phạm vi biến thành các hàm ẩn danh
0Hàm ẩn danh rõ ràng bao gồm
4 từ phạm vi xung quanh của nó. Lưu ý rằng điều này không giống với phạm vi toàn cầusai đường. 4
Như đã nói trước đây, phạm vi toàn cầu hơi đặc biệt và các hàm có thể nhập các biến từ nó một cách rõ ràng
1Hàm này sử dụng và sửa đổi biến toàn cục
4. Đừng làm điều này. (Trừ khi bạn thực sự thực sự thực sự biết mình đang làm gì, và thậm chí sau đó. đừng. )Tất cả những gì người gọi hàm này nhìn thấy là cái này
2Không có dấu hiệu nào cho thấy chức năng này có bất kỳ tác dụng phụ nào, nhưng nó có. Điều này rất dễ trở thành một mớ hỗn độn vì một số chức năng liên tục sửa đổi và yêu cầu một số trạng thái toàn cầu. Bạn muốn các hàm không trạng thái, chỉ hoạt động trên đầu vào của chúng và trả về đầu ra đã xác định, tuy nhiên bạn gọi chúng nhiều lần
Bạn nên tránh sử dụng phạm vi toàn cầu càng nhiều càng tốt;
Biến là một phần quan trọng của bất kỳ ngôn ngữ lập trình nào. Bạn có thể sử dụng chúng để lưu trữ tất cả các loại thông tin như số nguyên, số float, chuỗi, mảng, nội dung của tệp, v.v. Dữ liệu được lưu trữ trong các biến sau đó có thể được thao tác bằng cách thêm hoặc xóa thông tin. Sử dụng các biến cũng cho phép chúng ta tạo các vòng lặp và thực hiện một số tác vụ lặp đi lặp lại. Bạn cũng có thể định nghĩa các hàm lấy các biến khác nhau làm đối số và trả lại dữ liệu mới
Trong hướng dẫn này, chúng ta sẽ tìm hiểu về một khái niệm quan trọng được gọi là phạm vi biến và cách nó ảnh hưởng đến cách bạn viết mã trong PHP. Chúng tôi cũng sẽ đề cập đến việc sử dụng các từ khóa
2
75 và 2
76Phạm vi biến là gì?
Các biến được sử dụng để lưu trữ và truy cập hoặc thao tác thông tin sau này, nhưng bạn không thể truy cập dữ liệu của chúng từ bất kỳ nơi nào bạn muốn. Một số biến có thể không truy cập được ở một số nơi, tùy thuộc vào ngôn ngữ lập trình bạn đang sử dụng
Nói một cách đơn giản, phạm vi của một biến xác định tính khả dụng của nó trong các phần khác nhau của chương trình
Phạm vi biến trong PHP
PHP có cách tiếp cận dễ hiểu và thân thiện với người mới bắt đầu đối với phạm vi biến
Về cơ bản, một biến bạn xác định ở đâu đó trong tệp PHP sẽ hiển thị hoặc có sẵn ở hầu hết mọi nơi sau khi nó được xác định. Bạn cũng sẽ có thể sử dụng nó trong các tệp khác được thêm vào chương trình bằng cách sử dụng
2
77 và 2
78Giả sử có một tệp tên là biến. php và nó chứa đoạn mã sau
1
<?php
2
$apple_count = 12;
3
?>
Biến
2
79 cũng sẽ có sẵn trong một tệp khác với mã sau1
39_______2
include('variables.php');
3
<?php
1_______39_______2<?php
3<?php
4<?php
5?>
Tuy nhiên, biến này sẽ không khả dụng bên trong các hàm do người dùng định nghĩa. Đây là một ví dụ
1
39_______2
include('variables.php');
3
<?php
2<?php
1<?php
32
5<?php
52
72
82
9$apple_count = 12;
0$apple_count = 12;
1$apple_count = 12;
2$apple_count = 12;
3_______41_______4_______41_______5_______43_______Vì vậy, các biến được xác định bên ngoài hàm do người dùng xác định không có sẵn trong hàm. Tương tự, các biến được xác định trong một hàm tồn tại ngay bên trong hàm đó. Đó là lý do tại sao chúng tôi nhận được thông báo khi chúng tôi cố lặp lại giá trị của
2
80 bên ngoài hàm 2
81 của mình1
<?php
2
3
2
5<?php
13
3<?php
33
5<?php
52
92
8$apple_count = 12;
0$apple_count = 12;
2$apple_count = 12;
1?>
2$apple_count = 12;
3$apple_count = 12;
5?>
5?>
6?>
7?>
8?>
9?>
Truy cập các biến bên trong hàm
Các chức năng thường yêu cầu một số dữ liệu đầu vào để làm điều gì đó hữu ích. Cách tốt nhất để làm điều đó là truyền thông tin cùng với việc sử dụng các tham số khác nhau trong định nghĩa hàm. Ví dụ, hàm
2
82 bên dưới lấy tham số là số tự nhiên1
<?php
2
1
4_______42__________1
6<?php
1<?php
31
9<?php
52
92
8$apple_count = 12;
0<?php
4$apple_count = 12;
1<?php
6$apple_count = 12;
3_______43_______Nếu bạn cần lấy một biến từ bên ngoài và sử dụng nó bên trong một hàm, bạn có thể cân nhắc sử dụng từ khóa
2
75Sử dụng từ khóa PHP 275 để truy cập các biến
Bạn có thể chỉ cần sử dụng từ khóa
2
75 trước bất kỳ biến nào để lấy giá trị của nó từ phạm vi toàn cầu. Khi bạn làm điều đó, bất cứ thứ gì được lưu trữ trong biến sẽ có sẵn bên trong hàm mà không cần chuyển nó dưới dạng tham số. Bạn cũng sẽ có thể thay đổi giá trị của biến bên trong hàm và các thay đổi sẽ được phản ánh ở mọi nơiĐây là một ví dụ viết lại hàm
2
82 để sử dụng giá trị toàn cục là 2
871
<?php
2
3
2
3<?php
1<?php
32
6<?php
52
82
81
6$apple_count = 12;
0$apple_count = 12;
11
9$apple_count = 12;
32
9$apple_count = 12;
5?>
6include('variables.php');
8?>
8<?php
6?>
9?>
Một trong những bất lợi lớn khi làm mọi thứ theo cách này là chúng ta không còn biết loại dữ liệu mà
2
82 dựa vào để tạo ra kết quả của nó. Giá trị của 2
87 cũng có thể được thay đổi ở bất kỳ đâu trong mã của bạn và nó sẽ ảnh hưởng đến đầu ra của lệnh gọi lại 2
821
<?php
2
3
2
3<?php
1<?php
32
6<?php
52
82
81
6$apple_count = 12;
0$apple_count = 12;
11
9$apple_count = 12;
3$apple_count = 12;
5<?php
20?>
62
9?>
8?>
9include('variables.php');
8<?php
26<?php
6<?php
28<?php
29include('variables.php');
8<?php
31<?php
32<?php
33?>
Trong ví dụ trên, chúng ta không có cách nào biết điều gì đã thay đổi đầu ra của
2
82 mà không cần xem mã. Ở đây chúng ta vẫn có thể dễ dàng nhận ra rằng giá trị của 2
87 đã được tăng thêm 5 trong chính hàm đó. Tuy nhiên, điều này có thể không dễ dàng khi bạn đang xử lý một lượng lớn mãĐó là lý do tại sao tốt hơn hết là tránh sử dụng toàn cầu bất cứ khi nào có thể
Sử dụng PHP 293 Superglobal để truy cập các biến
Một cách khác để truy cập các biến toàn cục bên trong một hàm là sử dụng hàm siêu toàn cầu
2
93. Điều này cũng cho phép bạn có một biến cục bộ có cùng tên với biến toàn cục1
<?php
2
3
2
3<?php
1<?php
32
6<?php
5<?php
442
8<?php
46$apple_count = 12;
0$apple_count = 12;
1<?php
49$apple_count = 12;
31
6$apple_count = 12;
51
9?>
62
9?>
8?>
9include('variables.php');
8<?php
26<?php
6<?php
28<?php
62<?php
29?>
Các vấn đề khiến việc sử dụng từ khóa
2
75 trở thành một thông lệ không tốt cũng tồn tại đối với 2
93Bạn nên cân nhắc việc tránh sử dụng các biến toàn cục càng nhiều càng tốt và chỉ sử dụng chúng nếu bạn không thể nghĩ ra bất kỳ cách nào khác để dễ dàng lấy dữ liệu từ một biến bên trong hàm cụ thể của mình
Một tình huống có thể hữu ích khi sử dụng
2
75 là khi bạn muốn theo dõi và cập nhật giá trị của một biến qua một số định nghĩa hàm khác nhau và muốn những thay đổi trong giá trị của biến được phản ánh ở mọi nơiBiến tĩnh trong PHP
Các biến được định nghĩa bên trong một hàm trong PHP chỉ tồn tại trong phạm vi của hàm đó. Điều này có nghĩa là biến không còn khả dụng khi chúng ta thoát khỏi phạm vi cục bộ. Điều đó cũng có nghĩa là bất kỳ giá trị nào chúng ta gán cho một biến bên trong một hàm sẽ không tồn tại trong nhiều lần gọi hàm đó
1
<?php
2
1
43
<?php
70<?php
11
6<?php
3<?php
51
92
8$apple_count = 12;
0<?php
78$apple_count = 12;
1<?php
80$apple_count = 12;
32
9$apple_count = 12;
5?>
6<?php
85?>
8<?php
87?>
9<?php
26<?php
90<?php
28<?php
92<?php
29<?php
31<?php
95<?php
33<?php
97<?php
98?>
Như bạn có thể thấy, chúng tôi gọi
2
82 ba lần trong ví dụ trên, nhưng giá trị của nó tiếp tục đặt lại thành 0 ở đầu các cuộc gọi của chúng tôi. Điều này khiến chúng tôi khó theo dõi số lần chúng tôi đã gọi cho 2
82Một cách để khắc phục hạn chế này là sử dụng từ khóa
2
76. Bây giờ, giá trị của $apple_count = 12;
01 sẽ tồn tại qua nhiều cuộc gọi, như được hiển thị trong ví dụ bên dưới1
<?php
2
1
43
2
05<?php
11
6<?php
3<?php
51
92
8$apple_count = 12;
0<?php
78$apple_count = 12;
1<?php
80$apple_count = 12;
32
9$apple_count = 12;
5?>
6<?php
85?>
8<?php
87?>
9<?php
26<?php
90<?php
282
27<?php
29<?php
31<?php
95<?php
332
32<?php
982
342
352
36?>
72
38?>
Ví dụ trên cũng cho thấy rằng việc khai báo một biến là tĩnh trong PHP không làm cho nó khả dụng ngoài phạm vi của nó
Nếu bạn muốn truy cập giá trị của một biến bên ngoài chức năng của nó, cách tốt nhất để làm điều đó là sử dụng câu lệnh
$apple_count = 12;
02. Bạn có thể trả về bất kỳ loại giá trị nào như chuỗi, mảng, đối tượng, v.v.1
<?php
2
1
43
2
05<?php
11
6<?php
3<?php
51
92
8$apple_count = 12;
0<?php
78$apple_count = 12;
1$apple_count = 12;
32
56$apple_count = 12;
52
9?>
6?>
8<?php
85?>
9<?php
26<?php
90<?php
28<?php
292
67<?php
31<?php
332
70<?php
982
722
34?>
Suy nghĩ cuối cùng
PHP có hai loại phạm vi cho các biến. Có một phạm vi toàn cầu chung, trong đó các biến bạn xác định trong chương trình có sẵn ở mọi nơi, như vòng lặp và các tệp khác bao gồm tệp có biến. Sau đó, có một phạm vi cục bộ cho các hàm do người dùng xác định, trong đó các biến được giới hạn cho hàm cụ thể đó
Tuy nhiên, điều này không ngăn cản sự di chuyển tự do của thông tin bên trong và bên ngoài các chức năng. Bạn có thể truy cập vào các biến bên ngoài không được bao gồm dưới dạng tham số trong hàm bằng cách sử dụng từ khóa
2
75. Tương tự, bạn có thể truy cập giá trị của một biến được xác định bên trong một hàm bằng cách sử dụng câu lệnh $apple_count = 12;
02Học PHP với một khóa học trực tuyến miễn phí
Nếu bạn muốn học PHP, hãy xem khóa học trực tuyến miễn phí của chúng tôi về các nguyên tắc cơ bản của PHP
Trong khóa học này, bạn sẽ học các nguyên tắc cơ bản của lập trình PHP. Bạn sẽ bắt đầu với những kiến thức cơ bản, học cách PHP hoạt động và viết các hàm và vòng lặp PHP đơn giản. Sau đó, bạn sẽ xây dựng các lớp mã hóa để lập trình hướng đối tượng đơn giản (OOP). Đồng thời, bạn sẽ học tất cả các kỹ năng quan trọng nhất để viết ứng dụng cho web. bạn sẽ có cơ hội thực hành phản hồi các yêu cầu GET và POST, phân tích cú pháp JSON, xác thực người dùng và sử dụng cơ sở dữ liệu MySQL
4 loại phạm vi biến là gì?
Bạn sẽ tìm hiểu về bốn phạm vi khác nhau với sự trợ giúp của các ví dụ. cục bộ, kèm theo, toàn cầu và tích hợp sẵn . Các phạm vi này cùng nhau tạo thành cơ sở cho quy tắc LEGB được trình thông dịch Python sử dụng khi làm việc với các biến.
Có bao nhiêu phạm vi biến?
Phạm vi là một vùng của chương trình và nói chung có ba vị trí , nơi các biến có thể được khai báo. Bên trong một hàm hoặc một khối được gọi là biến cục bộ, Trong định nghĩa về tham số hàm được gọi là tham số hình thức. Bên ngoài tất cả các hàm được gọi là biến toàn cục.
Phạm vi của các biến PHP là gì?
Chỉ có hai phạm vi có sẵn trong PHP là phạm vi cục bộ và phạm vi toàn cầu. Khi một biến được truy cập bên ngoài phạm vi của nó, nó sẽ gây ra lỗi PHP Biến không xác định
Các loại biến trong PHP là gì?
Phạm vi biến .
Biến cục bộ
thông số chức năng
biến toàn cục
biến tĩnh