PHP static global, khi hai biến này trùng tên


Biến static và global trong PHP thực sự là rất đơn giản, tuy nhiên ở đâu đó vẫn thổi bùng lên những tranh luận hết sức thú vị.
Khi đọc tranh luận trên PHPvietnam về static và global. Tôi bỗng nảy ra một thắc mắc nho nhỏ. Là nếu 2 biến global và static trong một hàm có trùng tên thì sao😀.
<?php
$v = 100;
function conflict()
{
global $v;
        $v–; # 2 dấu trừ để giảm đó nha
echo $v;
static $v = 0;
$v++;
echo ($v).’,’;
}
for($i=1;$i<10;$i++)
{
conflict();
}
?>
Kết quả: (PHP5.2.3)
99/1,98/2,97/3,96/4,95/5,94/6,93/7,92/8,91/9,
Vậy thì đúng là global hay static … chẳng liên quan gì đến nhau. Trong cùng một hàm, khi muốn sử dụng biến dưới dạng global hay static, chỉ cần khai báo trước bằng global hay static.
Còn nếu muốn lấy … biến $v toàn cục trừ đi biến $v static, thì chắc là phải dùng biến trung gian như thế này:
function foo()
{
     global $v;
     $global_v = $v;
     static $v;
     $static_v = $v;
     return $global_v – $static_v;
}
😀, thực sự thì khi code, chắc ít người lâm vào trường hợp kể trên, bởi vì biến static trong một hàm, chỉ có tác dụng trong hàm đó thôi, nên cái tên cũng dễ chọn hơn.
Ngoài ra khi sử dụng biến global, còn có thể code theo cách sau mà không cần sử dụng khóa global:
function foo2()
{
         global $v;
}
tương đương với
function foo2()
{
        $v = $GLOBALS[‘v’];
}

2 comments

    1. Vấn đề là bạn có chạy với PHP5.2.3 như nói ở trên không?

      À xin lỗi bạn, vừa check lại có 1 lỗi hiển thị ở chỗ $v–; Đúng ra là phải $v–; Tại viết 2 dấu trừ gần nhau nên nó trông như 1.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s