Pertanyaan Apa itu?: Di PHP 5.3? [duplikat]


Kemungkinan Duplikat: Apa operator PHP "?" Dan ":" dipanggil dan apa yang mereka lakukan?

Dari http://twitto.org/

<?PHP
    require __DIR__.'/c.php';
    if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
        throw new Exception('Error');
    $c();
?>

Twitto menggunakan beberapa fitur baru yang tersedia pada PHP 5.3:

  1. Itu DIR konstan
  2. Operator ?:
  3. Fungsi anonim

  1. Apa yang dilakukan nomor 2 dengan ?: di PHP 5.3?

  2. Juga, apa yang mereka maksud dengan fungsi anonim? Bukankah itu sesuatu yang sudah ada untuk sementara waktu?


75
2018-01-28 08:33


asal


Jawaban:


?: adalah bentuk operator kondisional yang sebelumnya hanya tersedia sebagai:

expr ? val_if_true : val_if_false

Dalam 5.3, Anda dapat meninggalkan bagian tengahnya, mis. expr ?: val_if_false yang setara dengan:

expr ? expr : val_if_false

Dari manual:

Sejak PHP 5.3, dimungkinkan untuk meninggalkan bagian tengah dari operator kondisional. Ekspresi expr1 ?: expr3 kembali expr1 jika expr1 mengevaluasi ke TRUE, dan expr3 jika tidak.


126
2018-01-28 08:36



Itu ?: operator adalah operator bersyarat (Sering disebut sebagai operator terner):

Ekspresi (expr1) ? (expr2) : (expr3) mengevaluasi ke expr2 jika expr1 mengevaluasi ke BENAR, dan expr3 jika expr1 mengevaluasi ke SALAH.

Dalam kasus:

expr1 ?: expr2

Ekspresi mengevaluasi nilai dari expr1 jika expr1 aku s benar dan expr2 jika tidak:

Sejak PHP 5.3, dimungkinkan untuk meninggalkan bagian tengah dari operator terner. Ekspresi expr1 ?: expr3 kembali expr1 jika expr1 mengevaluasi ke BENAR, dan expr3 jika tidak.


35
2018-01-28 08:38



Lihat di sini:

Sejak PHP 5.3, dimungkinkan untuk meninggalkan bagian tengah dari operator terner. Ekspresi expr1?: Expr3 mengembalikan expr1 jika expr1 mengevaluasi ke TRUE, dan expr3 sebaliknya.

Fungsi anonim: Tidak, mereka tidak ada sebelum 5.3.0 (lihat catatan pertama di bawah contoh), setidaknya dengan cara ini:

function ($arg) { /* func body */ }

Satu-satunya cara adalah create_function(), yang lebih lambat, cukup rumit dan rawan kesalahan (karena menggunakan string untuk definisi fungsi).


4
2018-01-28 08:38