Trong khi trò chuyện với một người bạn mới bắt đầu học ngôn ngữ lập trình PHP, anh ấy hỏi tôi sự khác biệt giữa việc sử dụng dấu phẩy [,] và dấu chấm [. ] như một bộ nối
câu trả lời của tôi cho anh ấy là. đối với bản ghi, dấu phẩy không phải là dấu nối. nó được sử dụng để in hay đúng hơn là lặp lại một danh sách các biến, chuỗi và số tương tự như cách nó được sử dụng trong tiếng Anh. Trong khi dấu chấm nối hai chuỗi lại với nhau để tạo thành một chuỗi dài hơn
lưu ý. dấu phẩy chỉ hoạt động khi sử dụng cấu trúc ngôn ngữ echo và bạn không thể trả về biến được phân cách bằng dấu phẩy
Mảng PHP là công cụ hữu ích [và kỳ quặc] để tổ chức dữ liệu. Chúng có thể dẫn đến mã dài dòng, nếu bạn đang cố gắng lập trình phòng thủ, như trong ví dụ sau
$config["app"]["cache"]["provider"] = "redis";
// ...later
if [
isset[$config["app"]] and
isset[$config["app"]["cache"]] and
isset[$config["app"]["cache"]["provider"]
] {
}
// ...or with ominous error-suppression
if [!empty[$config["app"]["cache"]["provider"]]] {
}
Các nhà phát triển thường thích thay thế loại hành vi này bằng việc sử dụng ký hiệu dấu chấm. Đó là;
$config["app.cache.provider"];
// ...or
$config->get["app.cache.provider", $default];
Tôi thường cố gắng thực hiện những thứ như thế này, và mặc dù cuối cùng tôi cũng đến đó, nhưng có vẻ như tôi luôn thử một phương pháp khác ít xấu xí hơn phương pháp trước. Vì vậy, đây là những điều chỉnh của tôi trên các ví dụ rõ ràng nhất mà tôi có thể tìm thấy [từ Laravel framework]
Laravel framework triển khai các phương thức tĩnh để lấy và đặt các giá trị mảng, sử dụng ký hiệu dấu chấm
public static function get[$array, $key, $default = null]
{
if [is_null[$key]] return $array;
if [isset[$array[$key]]] return $array[$key];
foreach [explode['.', $key] as $segment]
{
if [ ! is_array[$array] ||
! array_key_exists[$segment, $array]]
{
return value[$default];
}
$array = $array[$segment];
}
return $array;
}
// ...and
public static function set[&$array, $key, $value]
{
if [is_null[$key]] return $array = $value;
$keys = explode['.', $key];
while [count[$keys] > 1]
{
$key = array_shift[$keys];
if [ ! isset[$array[$key]] || ! is_array[$array[$key]]]
{
$array[$key] = array[];
}
$array =& $array[$key];
}
$array[array_shift[$keys]] = $value;
return $array;
}
Đây là từ Chiếu sáng/Hỗ trợ/Arr. php
Những điều này cho chúng ta một ý tưởng tốt về những gì chúng ta nên chụp cho. Tôi muốn tiến thêm một bước và tạo một đặc điểm cho bất kỳ lớp nào giống như vùng chứa để có bộ nhớ trong, được truy cập/sửa đổi bằng cách sử dụng ký hiệu dấu chấm
Thực hiện đặc điểmChúng ta có thể bắt đầu bằng cách tạo một vài lớp khung, triển khai giao diện ArrayAccess