Hướng dẫn php conditional assignment operators - toán tử gán có điều kiện php

Giới thiệu

Các toán tử trong PHP là các dấu hiệu và ký hiệu được sử dụng để chỉ ra rằng một hoạt động cụ thể nên được thực hiện trên một toán hạng trong một biểu thức. Toán tử là các đối tượng hoạt động hoặc mục tiêu. Một biểu thức chứa các toán hạng và toán tử được sắp xếp một cách hợp lý. in PHP are signs and symbols which are used to indicate that a particular operation should be performed on an operand in an expression. Operands are the operation objects, or targets. An expression contains operands and operators arranged in a logical manner.

Trong PHP, có rất nhiều nhà khai thác, được nhóm thành các loại sau:

  • Toán tử logic

  • Toán tử chuỗi

  • Toán tử mảng

  • Toán tử số học

  • Toán tử chuyển nhượng

  • Toán tử so sánh

  • Increment/Decrement

  • Toán tử phân công có điều kiện

Một số ví dụ về các nhà khai thác này là:

  • + Bổ sung Addition
  • - phép trừ Subtraction
  • * Nhân Multiplication
  • Bộ phận / Division
  • % Mô đun Modulus
  • >
  • $z = varexp1 ?? varexp2;
    
    0
  • $z = varexp1 ?? varexp2;
    
    1
  • $z = varexp1 ?? varexp2;
    
    2
  • $z = varexp1 ?? varexp2;
    
    3 và nhiều hơn nữa.
    and so much more.

Các toán tử phân công có điều kiện là gì?

Các toán tử gán có điều kiện, như tên gọi, gán các giá trị cho các toán hạng dựa trên kết quả của một điều kiện nhất định. Nếu điều kiện là

$z = varexp1 ?? varexp2;
4, giá trị được gán. Nếu điều kiện là
$z = varexp1 ?? varexp2;
5, giá trị không được gán.
, as the name implies, assign values to operands based on the outcome of a certain condition. If the condition is
$z = varexp1 ?? varexp2;
4, the value is assigned. If the condition is
$z = varexp1 ?? varexp2;
5, the value is not assigned.

Có hai loại nhà điều hành phân công có điều kiện: toán tử thuê và các nhà khai thác kết hợp null.

1. Người vận hành thuê nhà
$z = varexp1 ?? varexp2;
6
$z = varexp1 ?? varexp2;
6

Cú pháp cơ bản
$y = expr1 ? expr2 : expr3;

Trong đó

$z = varexp1 ?? varexp2;
7,
$z = varexp1 ?? varexp2;
8 và
$z = varexp1 ?? varexp2;
9 là các biểu thức hoặc biến.

Từ cú pháp, giá trị của

bool(true)
bool(true)
bool(true)
bool(true)
0
0 sẽ được đánh giá. Giá trị này của
bool(true)
bool(true)
bool(true)
bool(true)
0
0 được đánh giá là
$z = varexp1 ?? varexp2;
8 nếu
$z = varexp1 ?? varexp2;
7 =
bool(true)
bool(true)
bool(true)
bool(true)
0
4. Giá trị của $ y là
$z = varexp1 ?? varexp2;
9 nếu
$z = varexp1 ?? varexp2;
7 =
bool(true)
bool(true)
bool(true)
bool(true)
0
7.

2. Các nhà khai thác kết hợp NULL
bool(true)
bool(true)
bool(true)
bool(true)
0
8
bool(true)
bool(true)
bool(true)
bool(true)
0
8

Toán tử

bool(true)
bool(true)
bool(true)
bool(true)
0
8 đã được giới thiệu trong PHP 7 và về cơ bản được sử dụng để kiểm tra điều kiện null trước khi gán các giá trị.
bool(true)
bool(true)
bool(true)
bool(true)
0
8 operator
was introduced in PHP 7 and is basically used to check for a NULL condition before assignment of values.

Cú pháp cơ bản
$z = varexp1 ?? varexp2;

Trong đó

$z = varexp1 ?? varexp2;
7,
$z = varexp1 ?? varexp2;
8 và
$z = varexp1 ?? varexp2;
9 là các biểu thức hoặc biến.

Từ cú pháp, giá trị của

bool(true)
bool(true)
bool(true)
bool(true)
0
0 sẽ được đánh giá. Giá trị này của
bool(true)
bool(true)
bool(true)
bool(true)
0
0 được đánh giá là
$z = varexp1 ?? varexp2;
8 nếu
$z = varexp1 ?? varexp2;
7 =
bool(true)
bool(true)
bool(true)
bool(true)
0
4. Giá trị của $ y là
$z = varexp1 ?? varexp2;
9 nếu
$z = varexp1 ?? varexp2;
7 =
bool(true)
bool(true)
bool(true)
bool(true)
0
7.

2. Các nhà khai thác kết hợp NULL bool(true) bool(true) bool(true) bool(true) 0 8

Toán tử

bool(true)
bool(true)
bool(true)
bool(true)
0
8 đã được giới thiệu trong PHP 7 và về cơ bản được sử dụng để kiểm tra điều kiện null trước khi gán các giá trị.

Các toán tử so sánh, như tên của chúng ngụ ý, cho phép bạn so sánh hai giá trị. Bạn cũng có thể quan tâm đến việc xem các bảng so sánh loại, vì chúng hiển thị các ví dụ về các so sánh liên quan đến loại khác nhau.

Toán tử so sánh
Thí dụTênKết quả
$ a == $ bBình đẳng
$z = varexp1 ?? varexp2;
4 nếu $ a bằng $ b sau khi loại tung.
if $a is equal to $b after type juggling.
$ a === $ bGiống hệt nhau
$z = varexp1 ?? varexp2;
4 nếu $ a bằng $ b và chúng cùng loại.
if $a is equal to $b, and they are of the same type.
$ a! = $ bKhông công bằng
$z = varexp1 ?? varexp2;
4 nếu $ a không bằng $ b sau khi loại tung.
if $a is not equal to $b after type juggling.
$ a $ bKhông công bằng
$z = varexp1 ?? varexp2;
4 nếu $ a không bằng $ b sau khi loại tung.
if $a is not equal to $b after type juggling.
$ a $ b$ a! == $ b Không định nghĩa if $a is not equal to $b, or they are not of the same type.
$z = varexp1 ?? varexp2;
4 nếu $ A không bằng $ B hoặc chúng không thuộc cùng loại.
$ a <$ bÍt hơn if $a is strictly less than $b.
$z = varexp1 ?? varexp2;
4 nếu $ a hoàn toàn dưới $ b.
$ a> $ bLớn hơn if $a is strictly greater than $b.
$z = varexp1 ?? varexp2;
4 nếu $ a hoàn toàn lớn hơn $ b.
$ aÍt hơn hoặc bằng if $a is less than or equal to $b.
$z = varexp1 ?? varexp2;
4 nếu $ a nhỏ hơn hoặc bằng $ b.
$ a> = $ bLớn hơn hoặc bằng if $a is greater than or equal to $b.
$ a $ b$ a! == $ bKhông định nghĩaint less than, equal to, or greater than zero when $a is less than, equal to, or greater than $b, respectively.

$z = varexp1 ?? varexp2;
4 nếu $ A không bằng $ B hoặc chúng không thuộc cùng loại.

$ a <$ b

Ít hơnstring is compared to a number or a numeric string then the string was converted to a number before performing the comparison. This can lead to surprising results as can be seen with the following example:

+9

-0

-1

$z = varexp1 ?? varexp2;
4 nếu $ a hoàn toàn dưới $ b.

bool(true)
bool(true)
bool(true)
bool(true)
0

$ a> $ b

bool(false)
bool(true)
bool(true)
bool(true)
a

-2

-3

-4

Lớn hơn

$z = varexp1 ?? varexp2;
4 nếu $ a hoàn toàn lớn hơn $ b.
$ aÍt hơn hoặc bằngKết quả
$ a == $ b or string Bình đẳng
$z = varexp1 ?? varexp2;
4 nếu $ a bằng $ b sau khi loại tung.-5 to "", numerical or lexical comparison
$ a === $ b or null Giống hệt nhau
$z = varexp1 ?? varexp2;
4 nếu $ a bằng $ b và chúng cùng loại.bool,
$z = varexp1 ?? varexp2;
5
<
$z = varexp1 ?? varexp2;
4
$ a! = $ b $ a! = $ b Không công bằng
$z = varexp1 ?? varexp2;
4 nếu $ a không bằng $ b sau khi loại tung.
, resource, int or float
$z = varexp1 ?? varexp2;
4 nếu $ a không bằng $ b sau khi loại tung.
, resource, int or float
$ a $ b
$ a! == $ b $ a! == $ b Không định nghĩa
$ a! = $ b Giống hệt nhau
$z = varexp1 ?? varexp2;
4 nếu $ a bằng $ b và chúng cùng loại.
is always greater
$ a! == $ b Giống hệt nhau
$z = varexp1 ?? varexp2;
4 nếu $ a bằng $ b và chúng cùng loại.
is always greater

$ a! = $ b

-8

Không công bằng

-9

$ a <$ b

Ít hơn

$z = varexp1 ?? varexp2;
4 nếu $ a hoàn toàn dưới $ b.floats are represented internally, you should not test two floats for equality.

$ a> $ bfloat for more information.

Lớn hơn: Be aware that PHP's type juggling is not always obvious when comparing values of different types, particularly comparing ints to bools or ints to strings. It is therefore generally advisable to use +7 and +8 comparisons rather than *2 and *3 in most cases.

$z = varexp1 ?? varexp2; 4 nếu $ a hoàn toàn lớn hơn $ b.

$ a

Ít hơn hoặc bằng

$z = varexp1 ?? varexp2;
4 nếu $ a nhỏ hơn hoặc bằng $ b.

$ a> = $ b

*6

Lớn hơn hoặc bằngexpr2 if expr1 evaluates to

$z = varexp1 ?? varexp2;
4, and expr3 if expr1 evaluates to
$z = varexp1 ?? varexp2;
5
.

$z = varexp1 ?? varexp2;
4 nếu $ a lớn hơn hoặc bằng $ b.expr1 if expr1 evaluates to
$z = varexp1 ?? varexp2;
4
, and expr3 otherwise. expr1 is only evaluated once in this case.

Tàu không gian: Please note that the ternary operator is an expression, and that it doesn't evaluate to a variable, but to the result of an expression. This is important to know if you want to return a variable by reference. The statement /2 in a return-by-reference function will therefore not work and a warning is issued.

Ghi chú::

Nên tránh các biểu thức ternary "xếp chồng". Hành vi của PHP khi sử dụng nhiều hơn một toán tử ternary chưa được khám phá trong một biểu thức duy nhất là không rõ ràng so với các ngôn ngữ khác. Thật vậy, trước Php 8.0.0, các biểu thức ternary đã được đánh giá liên kết trái, thay vì liên kết phải như hầu hết các ngôn ngữ lập trình khác. Dựa vào tính liên kết trái được không phản đối kể từ Php 7.4.0. Kể từ Php 8.0.0, toán tử ternary không liên kết.

Ví dụ #4 Hành vi ternary không rõ ràng

/3

/4

/5

Ghi chú::

Chuỗi các yếu tố ngắn (

$z = varexp1 ?? varexp2;
6), tuy nhiên, là ổn định và hành xử hợp lý. Nó sẽ đánh giá đối với đối số đầu tiên đánh giá đến giá trị không giả mạo. Lưu ý rằng các giá trị không xác định vẫn sẽ đưa ra một cảnh báo.

Ví dụ #5 Chuỗi ngắn hạn

/7

Nhà điều hành NULL kết hợp

Một nhà điều hành tốc ký hữu ích khác là "??" (hoặc null kết hợp lại) Nhà điều hành.

Ví dụ #6 gán giá trị mặc định

/8

Biểu thức /9 đánh giá là expr2 nếu expr1 là -5 và expr1 khác.expr2 if expr1 is -5, and expr1 otherwise.

Cụ thể, toán tử này không phát ra thông báo hoặc cảnh báo nếu giá trị phụ bên trái không tồn tại, giống như isset (). Điều này đặc biệt hữu ích trên các phím mảng.isset(). This is especially useful on array keys.

Lưu ý: Xin lưu ý rằng toán tử kết hợp null là một biểu thức và nó không đánh giá thành một biến, mà là kết quả của một biểu thức. Điều này rất quan trọng để biết nếu bạn muốn trả về một biến bằng cách tham khảo. Do đó, tuyên bố %1 trong chức năng hoàn trả sẽ không hoạt động và cảnh báo được đưa ra.: Please note that the null coalescing operator is an expression, and that it doesn't evaluate to a variable, but to the result of an expression. This is important to know if you want to return a variable by reference. The statement %1 in a return-by-reference function will therefore not work and a warning is issued.

Ghi chú::

Các nhà điều hành NULL kết hợp có quyền ưu tiên thấp. Điều đó có nghĩa là nếu trộn nó với các toán tử khác (như kết hợp chuỗi hoặc toán tử số học) có thể sẽ được yêu cầu.

%2

Ghi chú::

Xin lưu ý rằng người vận hành Null Coalescing cho phép làm tổ đơn giản:

Ví dụ #7 Nhà điều hành NULL NULL kết hợp

%3

%4

%5

Crazy888s tại hotmail dot com

12 năm trước

%6

%7

%8

Niall tại Maranelda Dot org ¶

4 năm trước

%9

>0

>1

>2

%8

Adam tại Caucho Dot Com ¶

16 năm trước

>4

>5

>6

>7

%8

rshawiii tại yahoo dot com ¶

16 năm trước

>9

$z = varexp1 ?? varexp2;
00

$z = varexp1 ?? varexp2;
01

$z = varexp1 ?? varexp2;
02

rshawiii tại yahoo dot com ¶

Giám mục ¶

$z = varexp1 ?? varexp2;
03

$z = varexp1 ?? varexp2;
04

$z = varexp1 ?? varexp2;
05

$z = varexp1 ?? varexp2;
06

%8

15 năm trước

Sumon Mahmud ¶

$z = varexp1 ?? varexp2;
08

$z = varexp1 ?? varexp2;
09

$z = varexp1 ?? varexp2;
10

$z = varexp1 ?? varexp2;
11

$z = varexp1 ?? varexp2;
12

%8

2 năm trước

Cuong Huy đến ¶

$z = varexp1 ?? varexp2;
14

$z = varexp1 ?? varexp2;
15

%8

11 năm trước

Sumon Mahmud ¶

$z = varexp1 ?? varexp2;
17

2 năm trước

Cuong Huy đến ¶

$z = varexp1 ?? varexp2;
18

$z = varexp1 ?? varexp2;
19

$z = varexp1 ?? varexp2;
20

$z = varexp1 ?? varexp2;
21

11 năm trước

$z = varexp1 ?? varexp2;
23

$z = varexp1 ?? varexp2;
24

$z = varexp1 ?? varexp2;
25

$z = varexp1 ?? varexp2;
26

%8

Ryan Mott ¶

Marcin Kuzawiski ¶

$z = varexp1 ?? varexp2;
28

$z = varexp1 ?? varexp2;
29

$z = varexp1 ?? varexp2;
30

$z = varexp1 ?? varexp2;
31

%8

7 năm trước

$z = varexp1 ?? varexp2;
22

$z = varexp1 ?? varexp2;
33

$z = varexp1 ?? varexp2;
34

$z = varexp1 ?? varexp2;
35

$z = varexp1 ?? varexp2;
36

%8