2010-08-02 27 views
13

Trong PHP, khi bạn có nội dung nào đó trong URL như "var = true" trong URL, 'true' và 'false' trong URL có được dịch sang biến boolean hay không bằng văn bản 'true' hoặc 'false'? Ví dụ: với url có "var = false" trong đó:'true' trong Nhận biến

if ($_GET['var'] == false) { ... } 

hoạt động? Hay biến này luôn đúng vì nó có văn bản trong đó?

+0

Tại sao bạn không thử nghiệm nó? – Ponkadoodle

Trả lời

14

Họ được truyền như dây đàn, vì vậy luôn truthy trừ khi họ là một trong số này, trong đó giá trị false thay vì:

  • Các chuỗi rỗng ''
  • Một chuỗi chứa chữ số không '0'

Để làm cho cuộc sống của tôi dễ dàng hơn, tôi chỉ chuyển các biến Boolean GET thành 1 hoặc 0 và xác thực chúng là một trong các giá trị đó hoặc quyết định giá trị mặc định phù hợp:

// Default value of false 
$var = false; 

if (isset($_GET['var'])) 
{ 
    if ($_GET['var'] === '1' || $_GET['var'] === '0') 
    { 
     $var = (bool) $_GET['var']; 
    } 
} 
+1

Wow PHP có kiểu đúc có nghĩa là nó theo một cách khác như C++? Ngọt! – Nilbert

+1

@Nilbert: [vâng.] (Http://php.net/manual/en/language.types.type-juggling.php#language.types.typecasting) – BoltClock

+2

@Nilbert Chào mừng bạn đến với những kiến ​​thức cơ bản về PHP. :) Các loại được đúc tất cả các thời gian ngầm trong PHP. – deceze

17

Không, $_GET sẽ luôn chứa chỉ các chuỗi.

Tuy nhiên, bạn có thể filter để nhận boolean.

FILTER_VALIDATE_BOOLEAN:
Returns TRUE cho "1", "true", "on""yes". Trả về FALSE nếu không. Nếu FILTER_NULL_ON_FAILURE được thiết lập, FALSE được trả về chỉ cho "0", "false", "off", "no", và "", và NULL được trả lại cho tất cả các giá trị phi boolean.

Ví dụ:

$value = filter_input(INPUT_GET, "varname", FILTER_VALIDATE_BOOLEAN, 
    array("flags" => FILTER_NULL_ON_FAILURE)); 
+1

+1 Không biết có một bộ lọc cho boolean. – BoltClock

+1

Liên kết tới http://php.net/filter sẽ phù hợp. – deceze

+0

Một chút đơn giản nhưng rất tiện dụng, +1. – zerkms

Các vấn đề liên quan