Hướng dẫn dùng terniary trong PHP

Để lập trình nhanh hơn, trong ngôn ngữ lập trình PHP, chúng ta nên thường xuyên sử dụng các phép toán Phép toán Ternary và Ternary Coalescing. Có những phép toán nào thì hãy tham khảo bài viết sau đây của vinasupport.com nhé!

Nội dung chính

  • 1. Phép toàn Ternary: cond ? expr1 : expr2
  • 2. Phép toán Ternary: cond ?: else-expr
  • 3. Phép toán Null Coalescing
  • 4. Phép toán Null Coalescing Assignment
  • 1. Phép toàn Ternary: cond ? expr1 : expr2
  • 2. Phép toán Ternary: cond ?: else-expr
  • 3. Phép toán Null Coalescing
  • 4. Phép toán Null Coalescing Assignment
  • Not the answer you're looking for? Browse other questions tagged php operator-keyword ternary or ask your own question.
  • Đăng nhập để trả lời câu hỏi
  • Có thể bạn quan tâm

Nội dung chính

  • 1. Phép toàn Ternary: cond ? expr1 : expr2
  • 2. Phép toán Ternary: cond ?: else-expr
  • 3. Phép toán Null Coalescing
  • 4. Phép toán Null Coalescing Assignment

Nội dung chính

  • 1. Phép toàn Ternary: cond ? expr1 : expr2
  • 2. Phép toán Ternary: cond ?: else-expr
  • 3. Phép toán Null Coalescing
  • 4. Phép toán Null Coalescing Assignment

1. Phép toàn Ternary: cond ? expr1 : expr2

Phép toán thường được sử dụng nhiều nhất.

$rank = $marks >= 50 ? 'pass' : 'fail';

Nó có nghĩa là:

if ($marks >= 50) { $rank = 'pass'; } else { $rank = 'fail'; }

2. Phép toán Ternary: cond ?: else-expr

$user = load_user() ?: false;

Nó tương đương với

$user = load_user() ? load_user() : false;

3. Phép toán Null Coalescing

$result = $_GET['value'] ?? 'foo';

Nó tương đương với

$result = isset($_GET['value']) ? $_GET['value'] : 'foo';

Thích hợp cho set default các giá trị parameter của url

4. Phép toán Null Coalescing Assignment

$value ??= 'foo';

Nó tương đương với

$value = $value ?? 'foo';

Để sử dụng các phép toán trên, các bạn phải sử dụng php version 7.4 trở lên.

Để lập trình nhanh hơn, trong ngôn ngữ lập trình PHP, chúng ta nên thường xuyên sử dụng các phép toán Phép toán Ternary và Ternary Coalescing. Có những phép toán nào thì hãy tham khảo bài viết sau đây của vinasupport.com nhé!

Nội dung chính

  • 1. Phép toàn Ternary: cond ? expr1 : expr2
  • 2. Phép toán Ternary: cond ?: else-expr
  • 3. Phép toán Null Coalescing
  • 4. Phép toán Null Coalescing Assignment

1. Phép toàn Ternary: cond ? expr1 : expr2

Phép toán thường được sử dụng nhiều nhất.

$rank = $marks >= 50 ? 'pass' : 'fail';

Nó có nghĩa là:

if ($marks >= 50) { $rank = 'pass'; } else { $rank = 'fail'; }

2. Phép toán Ternary: cond ?: else-expr

$user = load_user() ?: false;

Nó tương đương với

$user = load_user() ? load_user() : false;

3. Phép toán Null Coalescing

$result = $_GET['value'] ?? 'foo';

Nó tương đương với

$result = isset($_GET['value']) ? $_GET['value'] : 'foo';

Thích hợp cho set default các giá trị parameter của url

4. Phép toán Null Coalescing Assignment

$value ??= 'foo';

Nó tương đương với

$value = $value ?? 'foo';

Để sử dụng các phép toán trên, các bạn phải sử dụng php version 7.4 trở lên.

I want to write the following code in ternary operator. I tried in many way but it does not work at all.

<?php 

if(isset($options['footer_txt_color'])) {

    echo $options['footer_txt_color'];

} else {

    echo "#ffffff";

}

?>

asked Feb 19, 2015 at 9:11

1

Use this code

echo (isset($options['footer_txt_color'])) ? $options['footer_txt_color'] : '#ffffff';

answered Feb 19, 2015 at 9:15

Sunil PachlangiaSunil Pachlangia

1,9832 gold badges13 silver badges25 bronze badges

It should be like this:

<?php echo (isset($options['footer_txt_color'])) ? $options['footer_txt_color'] : "#ffffff"; ?>

answered Feb 19, 2015 at 9:13

AlbziAlbzi

15.2k6 gold badges44 silver badges61 bronze badges

Not the answer you're looking for? Browse other questions tagged php operator-keyword ternary or ask your own question.

Dựa trên các ví dụ từ trang này , tôi có các mẫu mã làm việc và không hoạt động bên dưới.

Mã làm việc sử dụng ifcâu lệnh:

if (!empty($address['street2'])) echo $address['street2'].'<br />';

Mã không hoạt động bằng cách sử dụng toán tử ternary:

$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

CẬP NHẬT
Sau mẹo của Brian, tôi thấy rằng tiếng vang $testđầu ra cho kết quả mong đợi. Sau đây hoạt động như một nét duyên dáng!

echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
  • php
  • ternary-operator
  • conditional-operator

85 hữu ích 1 bình luận 189k xem chia sẻ

answer

182

Hướng dẫn dùng terniary trong PHP

Các

(condition) ? /* value to return if condition is true */ 
            : /* value to return if condition is false */ ;

cú pháp không phải là toán tử "tốc ký nếu" ( ?được gọi là toán tử có điều kiện) bởi vì bạn không thể thực thi mã theo cách tương tự như khi bạn đã làm:

if (condition) {
    /* condition is true, do something like echo */
}
else {
    /* condition is false, do something else */
}

Trong ví dụ của bạn, bạn đang thực hiện echocâu lệnh khi $addresskhông trống. Bạn không thể làm điều này theo cách tương tự với toán tử có điều kiện. Tuy nhiên, những gì bạn có thể làm là echokết quả của toán tử có điều kiện:

echo empty($address['street2']) ? "Street2 is empty!" : $address['street2'];

và điều này sẽ hiển thị "Đường vắng!" nếu nó trống, nếu không nó sẽ hiển thị địa chỉ street2.

182 hữu ích 0 bình luận chia sẻ

answer

28

7+ PHP

Kể từ PHP 7, tác vụ này có thể được thực hiện đơn giản bằng cách sử dụng toán tử kết hợp Null như thế này:

echo !empty($address['street2']) ?? 'Empty';

28 hữu ích 2 bình luận chia sẻ

answer

23

Tuyên bố đúng / sai cơ bản

$is_admin = ($user['permissions'] == 'admin' ? true : false);

Thông điệp chào mừng có điều kiện

echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';

Tin nhắn mục có điều kiện

echo 'Your cart contains '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';

23 hữu ích 2 bình luận chia sẻ

answer

10

Toán tử ternary chỉ là một tốc ký cho khối if và if. Mã làm việc của bạn không có điều kiện khác, vì vậy không phù hợp cho việc này.

Ví dụ sau sẽ hoạt động:

echo empty($address['street2']) ? 'empty' : 'not empty';

10 hữu ích 0 bình luận chia sẻ

answer

3

Lưu ý rằng khi sử dụng các toán tử điều kiện lồng nhau, bạn có thể muốn sử dụng dấu ngoặc đơn để tránh các vấn đề có thể xảy ra!

Có vẻ như PHP không hoạt động giống như ít nhất là Javascript hoặc C #.

$score = 15;
$age = 5;

// The following will return "Exceptional"
echo 'Your score is: ' . ($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average'));

// The following will return "Horrible"
echo 'Your score is: ' . ($score > 10 ? $age > 10 ? 'Average' : 'Exceptional' : $age > 10 ? 'Horrible' : 'Average');

Mã giống nhau trong Javascript và C # trả về "Đặc biệt" trong cả hai trường hợp.

Trong trường hợp thứ 2, những gì PHP làm là (hoặc ít nhất đó là những gì tôi hiểu):

  1. $score > 10? Vâng
  2. $age > 10? không, vì vậy, hiện tại $age > 10 ? 'Average' : 'Exceptional'trả về 'Đặc biệt'
  3. sau đó, thay vì chỉ dừng toàn bộ tuyên bố và trả về 'Đặc biệt', nó tiếp tục đánh giá tuyên bố tiếp theo
  4. tuyên bố tiếp theo sẽ 'Exceptional' ? 'Horrible' : 'Average'trả về 'Khủng khiếp', vì 'Đặc biệt' là sự thật

Từ tài liệu: http://php.net/manual/en/lingu.operators.comparison.php

Chúng tôi khuyên bạn nên tránh "xếp chồng" các biểu thức ternary. Hành vi của PHP khi sử dụng nhiều toán tử ternary trong một câu lệnh là không rõ ràng.

3 hữu ích 0 bình luận chia sẻ

answer

2

Thông điệp chào mừng có điều kiện

echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';

Viết tắt PHP lồng nhau

echo 'Your score is:  '.($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average') );

2 hữu ích 0 bình luận chia sẻ

answer

2

Bạn có thể làm điều này thậm chí ngắn hơn bằng cách thay thế echobằng<?= code ?>

<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>

Điều này rất hữu ích, đặc biệt khi bạn muốn xác định, bên trong thanh điều hướng, liệu tùy chọn menu có được hiển thị như đã truy cập (đã nhấp) hay không:

<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>

2 hữu ích 1 bình luận chia sẻ

answer

2

Dưới đây là một số ví dụ thú vị, với một hoặc nhiều điều kiện khác nhau.

$value1 = '1';
$value2 = '2';
$value3 = '3';

// 1 Condition
$v1 = ($value1 == '1') ? TRUE : FALSE;
var_dump($v1);
echo "<br>";

// 2 Conditions
$v2 = ($value1 == '' ? TRUE : ($value2 == '2' ? TRUE : FALSE));
var_dump($v2);
echo "<br>";

// 3 Conditions
$v3 = ($value1 == '' ? TRUE : ($value2 == '' ? TRUE : ($value3 == '3' ? TRUE : FALSE)));
var_dump($v3);
echo "<br>";

// 4 Conditions
$v4 = ($value1 == '1') ? ($value2 == '2' ? ($value3 == '3' ? TRUE : 'FALSE V3') : 'FALSE V2') : 'FALSE V1' ;
var_dump($v4);
echo "<br>";

2 hữu ích 2 bình luận chia sẻ

answer

2

Đó là toán tử elvis (google nó: P) mà bạn đang tìm kiếm.

echo $address['street2'] ?: 'Empty'; 

Nó trả về giá trị của biến hoặc mặc định nếu biến trống.

2 hữu ích 2 bình luận chia sẻ

answer

0

Tôi nghĩ rằng bạn đã sử dụng dấu ngoặc sai cách. Thử đi:

$test = (empty($address['street2']) ? 'Yes <br />' : 'No <br />');

Tôi nghĩ rằng nó nên hoạt động, bạn cũng có thể sử dụng:

echo (empty($address['street2']) ? 'Yes <br />' : 'No <br />');

0 hữu ích 0 bình luận chia sẻ

answer

1

Ngoài ra còn có một nhà điều hành tốc ký và nó trông như thế này:

(biểu thức1) ?: biểu thức2 sẽ trả về biểu thức1 nếu nó ước tính thành true hoặc biểu thức2 nếu không.

Thí dụ:

$a = 'Apples';
echo ($a ?: 'Oranges') . ' are great!';

sẽ trở lại

Apples are great!

Kể từ PHP 5.3, có thể loại bỏ phần giữa của toán tử ternary. Biểu thức expr1 ?: Expr3 trả về expr1 nếu expr1 ước lượng thành TRUE và expr3 nếu không.

Từ sách hướng dẫn PHP

1 hữu ích 2 bình luận chia sẻ

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

Tải thêm tài liệu liên quan đến bài viết Hướng dẫn dùng terniary trong PHP