Tại sao dấu chấm được sử dụng trong PHP?

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)

Triển khai Laravel

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ểm

Chú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

 
namespace Connect;

use ArrayAccess;
use Connect\Traits\ArrayAccessTrait;

class Collection implements ArrayAccess
{
use ArrayAccessTrait;
}

Đây là từ nguồn/Bộ sưu tập. php

 
namespace Connect\Traits;

trait ArrayAccessTrait
{
/**
* @var array
*/
protected $data = [];

/**
* @param string $key
*
* @return bool
*/
public function offsetExists($key)
{
// TODO
}

/**
* @param string $key
*
* @return mixed
*/
public function offsetGet($key)
{
// TODO
}

/**
* @param string $key
* @param mixed $value
*/
public function offsetSet($key, $value)
{
// TODO
}

/**
* @param string $key
*/
public function offsetUnset($key)
{
// TODO
}
}

Đây là từ nguồn/Traits/ArrayAccessTrait. php

Bây giờ chúng ta có thể bắt đầu tạo các phương thức ký hiệu dấu chấm. Ký hiệu dấu chấm dễ dàng đạt được thông qua phép lặp hoặc đệ quy. Lặp lại có xu hướng ít tốn kém hơn so với đệ quy, vì vậy đó là cách tiếp cận mà chúng tôi sẽ thực hiện

/**
* @param string $key
*
* @return bool
*/
public function offsetExists($key)
{
return $this->exists($this->data, $key);
}

/**
* @param array $array
* @param string $key
*
* @return bool
*/
protected function exists(array $array, $key)
{
if (isset($array[$key])) {
return true;
}

foreach (explode(".", $key) as $part) {
if (!is_array($array) or !isset($array[$part])) {
return false;
}

$array = $array[$part];
}

return true;
}

Đây là từ nguồn/Traits/ArrayAccessTrait. php

Điều này cũng tạo ra một mô hình tốt cho phương thức offsetGet()

/**
* @param string $key
*
* @return mixed
*/
public function offsetGet($key)
{
return $this->get($this->data, $key);
}

/**
* @param array $array
* @param string $key
*
* @return null
*/
protected function get(array $array, $key)
{
if (isset($array[$key])) {
return $array[$key];
}

foreach (explode(".", $key) as $part) {
if (!is_array($array) or !isset($array[$part])) {
return null;
}

$array = $array[$part];
}

return $array;
}

Đây là từ nguồn/Traits/ArrayAccessTrait. php

Cài đặt tuân theo mô hình tương tự như cách triển khai Laravel, với một vài sự cắt giảm

/**
* @param string $key
* @param mixed $value
*/
public function offsetSet($key, $value)
{
$this->set($this->data, $key, $value);
}

/**
* @param array $array
* @param string $key
* @param mixed $value
*/
protected function set(array &$array, $key, $value)
{
$parts = explode(".", $key);

while (count($parts) > 1) {
$part = array_shift($parts);

if (!isset($array[$part]) or !is_array($array[$part])) {
$array[$part] = [];
}

$array =& $array[$part];
}

$array[array_shift($parts)] = $value;
}

Đây là từ nguồn/Traits/ArrayAccessTrait. php

Cuối cùng, chúng ta cần thêm phương thức offsetUnset()

________số 8_______

Đây là từ nguồn/Traits/ArrayAccessTrait. php

Tôi thích rằng tôi phải sử dụng một ký tự unicode trong tên phương thức đó, nhờ unset là một từ dành riêng bất kể ngữ cảnh. Bây giờ, chúng ta chỉ cần hoàn thành lớp Collection

Mục đích của dấu chấm trong PHP là gì?

' (dấu chấm) là toán tử nối của PHP . Hai toán hạng chuỗi được nối với nhau (các ký tự của chuỗi bên phải được nối với chuỗi bên trái) và trả về một chuỗi mới.

3 dấu chấm trong PHP nghĩa là gì?

toán tử trong đó, và về cơ bản nó có nghĩa là ". và mọi thứ khác sẽ được đưa vào $strings ". Bạn có thể chuyển 2 hoặc nhiều đối số vào hàm này và đối số thứ hai và tiếp theo sẽ được thêm vào mảng $strings, sẵn sàng để sử dụng.

PHP có ký hiệu dấu chấm không?

Dot triển khai giao diện ArrayAccess của PHP và đối tượng Dot cũng có thể được sử dụng giống như các mảng thông thường với ký hiệu dấu chấm bổ sung .

Việc sử dụng ký tự dấu chấm trong PHP là gì?

Đó là toán tử nối, nối cả hai chuỗi lại với nhau (tạo một chuỗi từ hai chuỗi riêng biệt).