Hướng dẫn are there global variables in php? - có các biến toàn cục trong php không?

Phạm vi của một biến là bối cảnh trong đó nó được xác định. Đối với hầu hết các phần, tất cả các biến PHP chỉ có một phạm vi duy nhất. Phạm vi duy nhất này bao gồm và các tập tin cần thiết là tốt. Ví dụ:

$a 1;
include 
'b.inc';
?>

Ở đây $ một biến sẽ có sẵn trong tập lệnh B.INC đi kèm. Tuy nhiên, trong các chức năng do người dùng xác định, một phạm vi chức năng cục bộ được giới thiệu. Bất kỳ biến nào được sử dụng bên trong một hàm theo mặc định giới hạn trong phạm vi hàm cục bộ. Ví dụ:

$a 1/* global scope */ function test()

    echo 
$a/* reference to local scope variable */ 
test();
?>

Tập lệnh này sẽ không tạo ra bất kỳ đầu ra nào vì câu lệnh ECHO đề cập đến phiên bản cục bộ của biến $ A và nó chưa được gán giá trị trong phạm vi này. Bạn có thể nhận thấy rằng điều này hơi khác một chút so với ngôn ngữ C trong các biến toàn cầu trong C được tự động có sẵn cho các chức năng trừ khi cụ thể được ghi đè bởi một định nghĩa cục bộ. Điều này có thể gây ra một số vấn đề ở chỗ mọi người có thể vô tình thay đổi một biến toàn cầu. Trong các biến toàn cầu PHP phải được khai báo toàn cầu bên trong một hàm nếu chúng sẽ được sử dụng trong hàm đó.

Từ khóa global

Đầu tiên, một ví dụ sử dụng global:

Ví dụ #1 sử dụng global

$a 1;
$b 2;

function

Sum()
{
    global 
$a$b;$b $a $b;
Sum();
echo 
$b;
?>

Tập lệnh trên sẽ xuất ra

Static object: NULL
Static object: NULL

Static object: NULL
Static object: object(stdClass)#3 (1) {
  ["property"]=>
  int(1)
}
0. Bằng cách tuyên bố $ a và $ b toàn cầu trong hàm, tất cả các tham chiếu đến một trong hai biến sẽ đề cập đến phiên bản toàn cầu. Không có giới hạn về số lượng biến toàn cầu có thể được thao tác bởi một hàm.

Cách thứ hai để truy cập các biến từ phạm vi toàn cầu là sử dụng mảng $ Globals được xác định bằng PHP đặc biệt. Ví dụ trước có thể được viết lại như:

Ví dụ #2 sử dụng $ globals thay vì toàn cầu

$a 1;
$b 2;

function

Static object: NULL
Static object: NULL

Static object: NULL
Static object: object(stdClass)#3 (1) {
  ["property"]=>
  int(1)
}
3

Mảng $ Globals là một mảng kết hợp với tên của biến toàn cầu là khóa và nội dung của biến đó là giá trị của phần tử mảng. Lưu ý cách $ Globals tồn tại trong bất kỳ phạm vi nào, điều này là do $ Globals là một siêu thị. Đây là một ví dụ chứng minh sức mạnh của Superglobals:

Ví dụ #3 Ví dụ chứng minh Superglobals và Phạm vi

Static object: NULL
Static object: NULL

Static object: NULL
Static object: object(stdClass)#3 (1) {
  ["property"]=>
  int(1)
}
4

Ghi chú::

Sử dụng từ khóa global Bên ngoài chức năng không phải là lỗi. Nó có thể được sử dụng nếu tệp được bao gồm từ bên trong một hàm.

Sử dụng các biến Static object: NULL Static object: NULL Static object: NULL Static object: object(stdClass)#3 (1) { ["property"]=> int(1) } 6

Một tính năng quan trọng khác của phạm vi biến là biến tĩnh. Một biến tĩnh chỉ tồn tại trong phạm vi hàm cục bộ, nhưng nó không mất giá trị khi thực hiện chương trình rời khỏi phạm vi này. Xem xét ví dụ sau:

Ví dụ #4 Ví dụ Thể hiện nhu cầu về các biến tĩnh

Static object: NULL
Static object: NULL

Static object: NULL
Static object: object(stdClass)#3 (1) {
  ["property"]=>
  int(1)
}
7

Chức năng này khá vô dụng vì mỗi lần được gọi là đặt $ A thành

Static object: NULL
Static object: NULL

Static object: NULL
Static object: object(stdClass)#3 (1) {
  ["property"]=>
  int(1)
}
8 và in
Static object: NULL
Static object: NULL

Static object: NULL
Static object: object(stdClass)#3 (1) {
  ["property"]=>
  int(1)
}
8. $ A ++ tăng biến không phục vụ mục đích nào vì ngay khi hàm thoát ra khỏi biến $ A biến mất. Để tạo chức năng đếm hữu ích sẽ không mất dấu của số lượng hiện tại, biến $ một được khai báo tĩnh:

Ví dụ #5 Ví dụ sử dụng các biến tĩnh

$a 1;
include 
'b.inc';
?>
0

Bây giờ, $ A chỉ được khởi tạo trong cuộc gọi đầu tiên của hàm và mỗi khi hàm $a 1;
include 
'b.inc';
?>
1 được gọi là nó sẽ in giá trị của $ a và tăng nó.

Các biến tĩnh cũng cung cấp một cách để đối phó với các hàm đệ quy. Một hàm đệ quy là một hàm tự gọi. Phải cẩn thận khi viết một hàm đệ quy vì có thể làm cho nó tái phát vô thời hạn. Bạn phải chắc chắn rằng bạn có một cách đủ để chấm dứt đệ quy. Hàm đơn giản sau đây được tính vào 10, sử dụng số lượng tĩnh $ để biết khi nào nên dừng:

Ví dụ #6 biến tĩnh với các hàm đệ quy

$a 1;
include 
'b.inc';
?>
2

Các biến tĩnh có thể được gán các giá trị là kết quả của các biểu thức không đổi, nhưng các biểu thức động, chẳng hạn như các lệnh gọi hàm, sẽ gây ra lỗi phân tích cú pháp.

Ví dụ #7 Khai báo các biến tĩnh

$a 1;
include 
'b.inc';
?>
3

Kể từ Php 8.1.0, khi một phương thức sử dụng các biến tĩnh được kế thừa (nhưng không được ghi đè), phương thức kế thừa giờ đây sẽ chia sẻ các biến tĩnh với phương thức mẹ. Điều này có nghĩa là các biến tĩnh trong các phương thức bây giờ hoạt động giống như các thuộc tính tĩnh.

Ví dụ #8 Sử dụng các biến tĩnh trong các phương thức được kế thừa

$a 1;
include 
'b.inc';
?>
4

Ghi chú::

Sử dụng từ khóa global Bên ngoài chức năng không phải là lỗi. Nó có thể được sử dụng nếu tệp được bao gồm từ bên trong một hàm.

Sử dụng các biến Static object: NULL Static object: NULL Static object: NULL Static object: object(stdClass)#3 (1) { ["property"]=> int(1) } 6

Một tính năng quan trọng khác của phạm vi biến là biến tĩnh. Một biến tĩnh chỉ tồn tại trong phạm vi hàm cục bộ, nhưng nó không mất giá trị khi thực hiện chương trình rời khỏi phạm vi này. Xem xét ví dụ sau:

$a 1;
include 
'b.inc';
?>
8

function

$a 1/* global scope */ function test()

    echo 
$a/* reference to local scope variable */ 
test();
?>
0

Ví dụ #4 Ví dụ Thể hiện nhu cầu về các biến tĩnh

NULL
object(stdClass)#1 (0) {
}

Một hành vi tương tự áp dụng cho câu lệnh

Static object: NULL
Static object: NULL

Static object: NULL
Static object: object(stdClass)#3 (1) {
  ["property"]=>
  int(1)
}
6. Các tài liệu tham khảo không được lưu trữ một cách thống trị:

$a 1/* global scope */ function test()

    echo 
$a/* reference to local scope variable */ 
test();
?>
2

$a 1/* global scope */ function test()

    echo 
$a/* reference to local scope variable */ 
test();
?>
3

$a 1/* global scope */ function test()

    echo 
$a/* reference to local scope variable */ 
test();
?>
4

Ví dụ trên sẽ xuất ra:

Static object: NULL
Static object: NULL

Static object: NULL
Static object: object(stdClass)#3 (1) {
  ["property"]=>
  int(1)
}

Ví dụ này chứng minh rằng khi gán một tham chiếu đến một biến tĩnh, nó không được nhớ khi bạn gọi hàm $a 1/* global scope */ function test()

    echo 
$a/* reference to local scope variable */ 
test();
?>
5 lần thứ hai.

Dodothedreamer tại Gmail Dot Com ¶

11 năm trước

$a 1/* global scope */ function test()

    echo 
$a/* reference to local scope variable */ 
test();
?>
6

Warheog tại Warhog Dot Net

16 năm trước

$a 1/* global scope */ function test()

    echo 
$a/* reference to local scope variable */ 
test();
?>
7

$a 1/* global scope */ function test()

    echo 
$a/* reference to local scope variable */ 
test();
?>
8

$a 1/* global scope */ function test()

    echo 
$a/* reference to local scope variable */ 
test();
?>
9

global0

Michael Bailey (Jinxidoru tại BYU Dot Net) ¶

18 năm trước

global1

global2

global3

global4

global5

Andrew tại Planetubh Dot Com ¶

13 năm trước

global6

global7

global8

global9

global0

global1

global2

global3

global4

Larax tại O2 dot pl ¶

16 năm trước

global5

global6

global7

global4

Michael Bailey (Jinxidoru tại BYU Dot Net) ¶

18 năm trước

global9

global0

global1

global2

Andrew tại Planetubh Dot Com ¶

13 năm trước

global3

global4

global5

global6

global7

global8

global4

$a 1;
$b 2;
0

Larax tại O2 dot pl ¶

Gried tại Nospam Dot Nsys Dot của ¶

$a 1;
$b 2;
1

$a 1;
$b 2;
2

$a 1;
$b 2;
3

$a 1;
$b 2;
4

global4

6 năm trước

Gried tại Nospam Dot Nsys Dot của ¶

$a 1;
$b 2;
6

$a 1;
$b 2;
7

global4

6 năm trước

13 năm trước

$a 1;
$b 2;
9

function0

$a 1/* global scope */ function test()

    echo 
$a/* reference to local scope variable */ 
test();
?>
9

function2

Larax tại O2 dot pl ¶

18 năm trước

function3

function4

function5

function6

Andrew tại Planetubh Dot Com ¶

13 năm trước

function7

function8

global4

Larax tại O2 dot pl ¶

Gried tại Nospam Dot Nsys Dot của ¶

Sum()
{
    global 
$a$b;$b $a $b;
Sum();
echo 
$b;
?>
0

Sum()
{
    global 
$a$b;$b $a $b;
Sum();
echo 
$b;
?>
1

Sum()
{
    global 
$a$b;$b $a $b;
Sum();
echo 
$b;
?>
2

Sum()
{
    global 
$a$b;$b $a $b;
Sum();
echo 
$b;
?>
3

global4

PHP có biến toàn cầu không?

$ Globals là một biến siêu toàn cầu PHP được sử dụng để truy cập các biến toàn cầu từ mọi nơi trong tập lệnh PHP (cũng từ bên trong các chức năng hoặc phương thức). PHP lưu trữ tất cả các biến toàn cầu trong một mảng có tên $ Globals [index]. Chỉ số giữ tên của biến. which is used to access global variables from anywhere in the PHP script (also from within functions or methods). PHP stores all global variables in an array called $GLOBALS[index]. The index holds the name of the variable.

Làm thế nào để các biến toàn cầu hoạt động trong PHP?

Các biến toàn cầu đề cập đến bất kỳ biến nào được xác định bên ngoài hàm.Các biến toàn cầu có thể được truy cập từ bất kỳ phần nào của tập lệnh, tức là bên trong và bên ngoài hàm.Vì vậy, một biến toàn cầu có thể được khai báo giống như biến khác nhưng nó phải được khai báo bên ngoài định nghĩa chức năng.. Global variables can be accessed from any part of the script i.e. inside and outside of the function. So, a global variable can be declared just like other variable but it must be declared outside of function definition.

Làm thế nào tôi có thể sử dụng mảng toàn cầu trong PHP?

Có hai cách để tham khảo một biến toàn cầu trong PHP: Sử dụng từ khóa toàn cầu khi bắt đầu mọi hàm sử dụng biến.Sử dụng mảng $ Globals.Use the global keyword at the start of every function that uses the variable. Use the $GLOBALS array.

Sự khác biệt giữa biến tĩnh và biến toàn cầu trong PHP là gì?

Toàn cầu được sử dụng để có được các vars toàn cầu có thể được xác định trong các tập lệnh khác hoặc không trong cùng một phạm vi.e.g.static được sử dụng để xác định một var có toàn bộ tuổi thọ kịch bản và chỉ xuất hiện một lần. e.g. Static is used to define an var which has whole script life, and init only once.