2011-07-11 37 views
7

hiện tôi đang sử dụng chức năng này php:php chức năng để biến unset thông qua tham khảo

function if_exist(&$argument, $default = '') 
{ 
    if (isset ($argument)) 
    { 
     echo $argument; 
    } 
    else 
    { 
     echo $default; 
    } 
} 

tôi muốn chức năng này để bỏ đặt $ luận biến (thông qua tham khảo) và $ mặc định chỉ sau khi lặp lại giá trị của họ , tôi có thể làm cái này như thế nào? Cảm ơn trước.

Trả lời

12

Theo hướng dẫn cho unset:

Nếu một biến mà được thông qua tham khảo là unset() bên trong một hàm chỉ, biến cục bộ bị hủy. Biến trong môi trường gọi sẽ giữ nguyên giá trị giống như trước khi bỏ đặt() là được gọi.

Tôi cho rằng đây là vấn đề bạn đang gặp phải. Vì vậy, đề xuất của tôi là chỉ cần đặt $argument thành NULL. Trong đó, theo số NULL docs sẽ "xóa biến và không đặt giá trị của biến đó".

Ví dụ: $argument = NULL;

+0

tôi đã làm điều này: chức năng if_exist (& $ luận, $ default = '') { \t if (isset ($ argument)) \t { \t \t echo $ luận; \t} \t khác \t { \t \t echo $ mặc định; \t} \t $ luận = NULL; } nhưng vẫn không có may mắn, kết quả là giống như trước :( –

+0

@Pawan: Đây có thể được. có thể trong tình huống của bạn, tôi không chắc chắn, nhưng những gì về chỉ làm cho nó trống (tức là. '$ argument = '';') và sau đó thay vì kiểm tra nếu nó được đặt, hãy kiểm tra xem nó có trống không. Điều này, tất nhiên, phụ thuộc vào nếu một chuỗi trống là một giá trị hợp lệ. –

2

$default được chuyển bởi giá trị, vì vậy không thể bỏ đặt giá trị (ngoại trừ trong phạm vi địa phương).

Khi bạn chắc chắn đã phát hiện ra, unset() chỉ cần hủy tham chiếu đến $argument. Bạn có thể (loại) unset $argument như thế này:

$argument = null; 
+0

Gán cho null không hoàn toàn giống như không đặt nó, mặc dù nó có nghĩa là 'isset()' cũng sẽ cho kết quả tương tự. Nhưng tôi đoán nó sẽ đủ, vì bạn không thể làm điều tương tự bằng cách gọi 'unset()'. – BoltClock

+0

tôi đã làm nó quá, nhưng vẫn không có may mắn, không phải $ đối số cũng không mặc định $ đang được bỏ đặt. :( –

+0

@Pawan Choudhary: Bạn có thể hiển thị mã mới của mình trong bài đăng gốc và hiển thị cách bạn đã kiểm tra xem các biến đã được đặt chưa? –

1

cách duy nhất để làm điều này với một chức năng được sử dụng globals.

//To unset() a global variable inside of a function, 
// then use the $GLOBALS array to do so: 

<?php 
function foo() 
{ 
    unset($GLOBALS['bar']); 
} 

$bar = "something"; 
foo(); 
?> 
Các vấn đề liên quan