2010-11-08 32 views
29

Tôi đang cố thay đổi một biến nằm ngoài một hàm, từ bên trong một hàm. Bởi vì nếu ngày mà hàm đang kiểm tra vượt quá một số tiền nhất định, tôi cần nó để thay đổi năm cho ngày ở đầu mã.Thay đổi biến toàn cầu từ bên trong một hàm PHP

$var = "01-01-10"; 
function checkdate(){ 
    if("Condition"){ 
      $var = "01-01-11"; 
     } 
} 

Trả lời

38

A. Sử dụng từ khóa global để nhập từ phạm vi ứng dụng.

$var = "01-01-10"; 
function checkdate(){ 
    global $var; 
    if("Condition"){ 
     $var = "01-01-11"; 
    } 
} 
checkdate(); 

B. Sử dụng mảng $GLOBALS.

$var = "01-01-10"; 
function checkdate(){ 
    if("Condition"){ 
     $GLOBALS['var'] = "01-01-11"; 
    } 
} 
checkdate(); 

C. Chuyển biến by reference.

$var = "01-01-10"; 
function checkdate(&$funcVar){ 
    if("Condition"){ 
     $funcVar = "01-01-11"; 
    } 
} 
checkdate($var); 
+0

Đối với ví dụ thứ ba (C), nên dòng đầu tiên và cuối cùng tham chiếu $ var hoặc $ funcVar ... hay dòng cuối cùng đó là '$ var = checkdate ($ var);'? –

+2

@JeromyFrench Dòng đầu tiên và cuối cùng tham chiếu đến biến trong phạm vi bên ngoài, có tên '$ var'.Bên trong hàm, nó có thể có bất kỳ tên nào khác, vì vậy tôi đã chọn '$ funcVar' để minh họa cụ thể rằng tên có thể khác. Về '$ var = checkdate ($ var);', toàn bộ mục đích của ví dụ là để hiển thị truyền _by reference_ và thay đổi biến được truyền trực tiếp trong hàm. –

+2

Ok, tôi nghĩ mình đã hiểu. 'function checkdate (& $ funcVar)' kết hợp với 'checkdate ($ var);' ánh xạ '$ var' bên ngoài vào' $ funcVar' bên trong. –

44

Chỉ cần sử dụng các từ khóa global như vậy:

$var = "01-01-10"; 
function checkdate(){ 
    global $var; 

    if("Condition"){ 
      $var = "01-01-11"; 
     } 
} 

Bất kỳ tham chiếu đến biến mà sẽ là một trong những thế giới sau đó.

+0

nhưng tôi muốn thay đổi biến toàn cầu vì vậy bất cứ điều gì tôi đặt var thành, nó sẽ ảnh hưởng đến biến toàn cầu bên ngoài hàm? –

+4

Đó là những gì điều này sẽ làm. Sử dụng 'global' thay đổi biến' $ var' bên trong hàm để trỏ đến biến toàn cục. Khi bạn thay đổi biến đó bên trong hàm, nó sẽ thay đổi biến toàn cục. – Buggabill

8

Tất cả câu trả lời ở đây đều tốt, nhưng ... bạn có chắc chắn muốn làm điều này không?

Thay đổi biến toàn cầu từ bên trong hàm thường là một ý tưởng tồi, vì nó có thể dễ dàng khiến mã spaghetti xảy ra, trong đó các biến đang được thay đổi trên toàn hệ thống, chức năng phụ thuộc lẫn nhau, vv .

Xin cho phép tôi đề nghị một vài lựa chọn:

1) hướng đối tượng lập trình

2) Có chức năng trả về một giá trị, được sự phân công của người gọi.

ví dụ: $ Var = checkdate();

3) Có giá trị được lưu trữ trong một mảng được truyền vào các chức năng bằng cách tham khảo

chức năng checkdate (& $ giá trị) { if (condition) { $ giá trị [ "hẹn hò" ] = "01-01-11"; } }

Hy vọng điều này sẽ hữu ích.

+1

Phương án số 2 là vua. – Stephen

5

Cố gắng vượt qua điều này bằng cách tham khảo

$var = "01-01-10"; 
    function checkdate(&$funcVar){ 
     if("Condition"){ 
      $funcVar = "01-01-11"; 
     } 
    } 
    checkdate($var); 

hoặc Hãy thử cùng này như ở trên, giữ chức năng như nhau.

$var = "01-01-10"; 
    function checkdate($funcVar){ 
     if("Condition"){ 
      $funcVar = "01-01-11"; 
     } 
    } 
    checkdate(&$var); 
Các vấn đề liên quan