Nếu một biến được sử dụng thường xuyên trong các mẫu của bạn, việc áp dụng công cụ sửa đổi
var_dump[$unset_var]; // outputs NULL
8 mỗi khi nó được đề cập có thể hơi xấu. Bạn có thể khắc phục điều này bằng cách gán giá trị mặc định cho biến với hàm var_dump[$unset_var]; // outputs NULL
9Ví dụ 21. 2. Gán một biến mẫu giá trị mặc định của nó
{* do this somewhere at the top of your template *} {assign var='title' value=$title|default:'no title'} {* if $title was empty, it now contains the value "no title" when you use it *} {$title}
Xem thêm công cụ sửa đổi
var_dump[$unset_var]; // outputs NULL
8 và Mặc dù không cần thiết trong PHP, tuy nhiên, việc khởi tạo các biến là một cách thực hành rất tốt. Các biến chưa được khởi tạo có giá trị mặc định của loại của chúng tùy thuộc vào ngữ cảnh mà chúng được sử dụng
Bỏ đặt VÀ không được ước tính
var_dump[$unset_var]; // outputs NULL
Boolean
echo[$unset_bool ? "true\n" : "false\n"]; // outputs 'false'
Chuỗi
$unset_str .= 'abc';
var_dump[$unset_str]; // outputs 'string[3] "abc"'
số nguyên
$unset_int += 25; // 0 + 25 => 25
var_dump[$unset_int]; // outputs 'int[25]'
phao/gấp đôi
$unset_float += 1.25;
var_dump[$unset_float]; // outputs 'float[1.25]'
Mảng
$unset_arr[3] = "def";
var_dump[$unset_arr]; // outputs array[1] { [3]=> string[3] "def" }
Vật
$unset_obj->foo = 'bar';
var_dump[$unset_obj]; // Outputs: object[stdClass]#1 [1] { ["foo"]=> string[3] "bar" }
Việc dựa vào giá trị mặc định của một biến chưa được khởi tạo là một vấn đề trong trường hợp gộp một tệp này vào một tệp khác sử dụng cùng một tên biến
Khi thiết kế các hàm của bạn, việc có thể gán giá trị mặc định cho các tham số không được truyền thường rất hữu ích - PHP thực hiện điều này cho hầu hết các hàm của nó và nó giúp bạn tiết kiệm được việc phải truyền tham số trong phần lớn thời gian nếu chúng thường được truyền.
Để xác định các tham số mặc định của riêng bạn cho một hàm, chỉ cần thêm giá trị hằng số mà bạn muốn chúng được đặt sau các biến, như thế này
________số 8Kịch bản đó sẽ xuất ra như sau
echo[$unset_bool ? "true\n" : "false\n"]; // outputs 'false'
1Bây giờ, hãy xem xét chức năng này
function doBar[$FirstName, $LastName = "Smith"] { }
Điều đó có nghĩa là cả $FirstName và $LastName đều được đặt thành Smith phải không?
var_dump[$unset_var]; // outputs NULL
0Vì vậy, để chào một người tên là John Smith, bạn chỉ cần sử dụng
var_dump[$unset_var]; // outputs NULL
1Để chào một người tên là Tom Davies, bạn sẽ sử dụng
var_dump[$unset_var]; // outputs NULL
2Để chào một người tên là Tom Smith, bạn sẽ sử dụng
var_dump[$unset_var]; // outputs NULL
3Bây giờ, bạn sẽ chào một người tên là John Wilson như thế nào? . Nhưng nếu bạn thử mã như thế này, bạn sẽ thấy nó không hoạt động
var_dump[$unset_var]; // outputs NULL
4Thay vì John Wilson, bạn sẽ nhận được Wilson Smith - PHP sẽ giả sử tham số bạn cung cấp là tên, vì nó điền các tham số của nó từ trái sang phải. Logic tương tự quy định rằng bạn không thể đặt giá trị mặc định trước giá trị không mặc định, như thế này
var_dump[$unset_var]; // outputs NULL
5Nếu ai đó đã sử dụng doWombat["Peter"], liệu họ có đang cố cung cấp một giá trị cho $FirstName để sử dụng thay vì giá trị mặc định hay họ muốn giá trị mặc định trong đó và Peter là cho $LastName?
Bạn muốn học PHP 7?
Hacking with PHP đã được cập nhật đầy đủ cho PHP 7 và hiện có sẵn dưới dạng PDF có thể tải xuống. Nhận hơn 1200 trang học PHP thực hành ngay hôm nay
Nếu điều này hữu ích, vui lòng dành chút thời gian để nói với những người khác về Hacking với PHP bằng cách tweet về nó
Cả hai sẽ phát sinh lỗi do chỉ mục không xác định [cả hai lần đầu tiên cố gắng lấy giá trị tại chỉ mục trước] nếu chỉ mục không được đặt. Đây là một điều nhỏ, nhưng ngay cả khi bạn đã tắt báo cáo lỗi VÀ ghi nhật ký, thì lỗi vẫn được nêu ra, được tạo và lan truyền qua ngăn xếp trước khi nó được kiểm tra xem có chỗ nào để báo cáo lỗi không. Và do đó, chỉ cần làm điều gì đó CÓ THỂ gây ra lỗi, sẽ gây ra hiệu suất
Hãy ghi nhớ điều này vì điều này áp dụng cho tất cả các Loại lỗi [Thông báo, Cảnh báo, v.v.] và trong các ứng dụng lớn có thể là một vấn đề lớn. Để tránh điều này, bạn phải sử dụng một hàm không gây ra lỗi khi thiếu chỉ mục, chẳng hạn như
echo[$unset_bool ? "true\n" : "false\n"]; // outputs 'false'
2 hoặc echo[$unset_bool ? "true\n" : "false\n"]; // outputs 'false'
3 và không sử dụng dạng bậc ba rút gọnHãy thử một chức năng như
var_dump[$unset_var]; // outputs NULL
6Điều này không gây ra lỗi và sẽ tạo đường dẫn nếu nó không tồn tại. Nó cũng có lợi từ việc hợp nhất logic để đặt giá trị mặc định ở một nơi, thay vì ____24 ở mọi nơi
Như đã đề cập ở nơi khác, tùy chọn khác là
var_dump[$unset_var]; // outputs NULL
7Cái nào cũng tốt và có lẽ hiệu quả hơn
Tuy nhiên, tất cả những gì đã nói, lý tưởng nhất là điều này chỉ nên được xử lý trong dịch vụ tiêu dùng. Nếu giá trị trống, thì người tiêu dùng [dù là chế độ xem hay ứng dụng khách khác [như javascript]] sẽ được phép tự đưa ra lựa chọn này. Trên thực tế, dữ liệu ngữ nghĩa trống cho mô hình. Cách xử lý điều này tùy thuộc vào người tiêu dùng, nghĩa là, nếu điều này chuyển sang mẫu/chế độ xem, thì điều kiện phải được xử lý trong khi hiển thị. Nếu nó được gửi dưới dạng JSON, khách hàng sẽ có thể đưa ra lựa chọn
Bạn đang hỏi về phong cách, đó có lẽ là điều quan trọng nhất. Phong cách tốt nhất là, nếu bạn đang cung cấp dữ liệu cho khách hàng, đừng giả mạo nó [nhưng hãy ghi lại phản hồi trống có thể có]