2012-01-27 29 views
20

Trong C#, tôi đã đến để áp dụng các phương pháp sau đây khởi tạo chuỗi rỗng:Cách thích hợp để khởi tạo các chuỗi rỗng trong PHP là gì?

string account = string.empty; 

hơn

string account = ""; 

Theo cố vấn của tôi và nhà phát triển C# khác mà tôi đã nói chuyện với, các phương pháp đầu tiên là thực hành tốt hơn.

Điều đó nói rằng, có cách nào tốt hơn để khởi tạo chuỗi rỗng trong PHP không? Hiện tại, tôi thấy những điều sau được sử dụng rộng rãi:

$account = ''; 

Cảm ơn.

+3

Strings không đối tượng lớp đầu tiên trong php, do đó không thực sự bất kỳ khác cách để khởi tạo chúng trong mã của bạn ... – rdlowrey

Trả lời

22

Việc bạn đang làm là chính xác. Không còn nhiều điều để nói về nó nữa.

Ví dụ:

$account = ''; 

if ($condition) $account .= 'Some text'; 

echo $account; 

Bạn có thể nhận ngớ ngẩn và làm điều gì đó như thế này:

$str = (string) NULL; 

..nhưng đó là hoàn toàn vô nghĩa, và đó là chính xác những điều tương tự - một chuỗi rỗng.

Bạn đang làm đúng.

+0

Điều gì về: $ tài khoản = null; ? – kaspnord

+0

Vâng, điều đó sẽ hoạt động tốt. Đó là tất cả phụ thuộc ngữ cảnh, bạn có thể muốn xem liệu giá trị là 'NULL' thay vì' "" '(chuỗi rỗng) sau này (nhưng thực sự bạn không cần phải). Phương thức của bạn rõ ràng hơn nhiều, bạn có thể nói var là một chuỗi ngay lập tức. Đánh máy yếu có thể là bạn hoặc kẻ thù của bạn. –

3

Dưới đây là một số điều khác cần lưu ý khi làm việc với các chuỗi trong PHP:

// Localize based of possible existence 
$account = (array_key_exists('account', $results)) ? $results['account'] : null; 

// Check to see if string was actually initialized 
return (isset($account)) ? $account : null 

// If a function is passed an arg which is REQUIRED then validate it 
if (empty($arg1)) { 
    throw new Exception('Invalid $arg1'); 
} 

echo $arg; 

// If you are looking to append to string, then initialize it as you described 
$account = null; 

if (!empty($firstName)) { 
    $account .= $firstName; 
} 

echo $account; 

// Also, it's better to initialize as null, so you an do simple check constructs 
if (is_null($account)) { 
    // Do something 
} 

// Versus these types of checks 
if ($account == '') { 
    // Do something 
} 

Bình thường, tôi cố gắng tránh khởi vars như thế này. Thay vào đó tôi bản địa hóa, hoặc kiểm tra sự tồn tại trong toàn bộ mã, nếu không bạn sẽ kết thúc việc duy trì một danh sách các biến có thể không phản ánh việc sử dụng trong suốt mã sau khi khởi tạo.

+0

Cảm ơn, điều đó rất hữu ích. Thật không may, tôi không có đủ đại diện để bỏ phiếu cho câu trả lời của bạn. – kaspnord

+0

Đừng lo, hãy vui vẻ với PHP. –

5

Đối với hầu hết các phần, điều này không liên quan. Không giống như nhiều ngôn ngữ, trong PHP nó (thường) không quan trọng cho dù bạn khởi tạo một biến. PHP sẽ tự động truyền biến chưa được khởi tạo (hoặc thậm chí không khai báo) khi thích hợp để sử dụng ngay lập tức. Ví dụ: các thông tin sau đây đều chính xác:

$a; 
$a + 7; // Evaluates to 7 
$a . "This is a test."; // Evaluates to "This is a test." 
if (! $a) {} // Evaluates as true 

Điều quan trọng là chọn chức năng kiểm tra loại biến (như kiểm tra nghiêm ngặt bình đẳng, ===). Ví dụ: các lỗi sau không thành công:

$a; 
if (is_string($a)) { 
    print 'success'; 
} 
else { 
    print 'fail'; 
} 

Tiện ích này có chi phí rất cao. Không giống như các ngôn ngữ chính tả (hoặc ít nhất là "được nhập đúng hơn"), không có gì trong ngôn ngữ chính để giúp bạn nắm bắt các lỗi lập trình phổ biến. Ví dụ: những điều sau đây sẽ thực hiện một cách vui vẻ, nhưng có thể không như mong đợi:

$isLoggedIn = getLoginStatus($user); 
if ($isLogedIn) { 
    // Will never run 
    showOrder($user); 
} 
else { 
    showLoginForm(); 
} 

Nếu bạn chọn khởi tạo tất cả các biến, hãy làm như bạn đã làm. Nhưng sau đó bật thông báo PHP (E_NOTICE) để nhận cảnh báo thời gian chạy về các biến chưa được khởi tạo. Nếu bạn không, bạn về cơ bản lãng phí thời gian và tổ hợp phím khởi tạo biến của riêng bạn.

0

chr(32) đại diện cho không gian ASCII (tức là chuỗi có độ dài 1 byte).

Nếu bạn muốn tránh những sai lầm như $myEmpty = " " vs $myEmpty = " " vs $myEmpty = ""

Đôi khi thật khó để biết khi nào có hai khoảng trống hoặc một hoặc không bằng mắt của con người. Sử dụng hàm chr được giải quyết chắc chắn.

Và đối với chuỗi thực sự trống rỗng (zero byte), không có cách nào khác ngoài việc chỉ đơn giản là định nghĩa nó với (duy nhất) dấu ngoặc kép như $nothing = '';

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