Saya suka melakukan hal semacam ini di Perl: $foo = $bar || $baz
untuk menetapkan $baz
ke $foo
jika $bar
kosong atau tidak terdefinisi. Anda juga memiliki $foo ||= $bletch
yang hanya akan menetapkan $bletch
untuk $foo
jika $foo
tidak didefinisikan atau kosong.
Operator ternary dalam situasi ini membosankan dan melelahkan. Tentunya ada metode sederhana dan elegan yang tersedia di PHP?
Atau satu-satunya jawaban fungsi kustom yang menggunakan isset ()?
php
perl
operators
default-value
Tom Auger
sumber
sumber
//
dan//=
dan mereka ada pada Perl v5.10.0. Yang asli||
dan||=
uji untuk nilai logis, bukan untuk definisi.Jawaban:
Dalam PHP 7 kami akhirnya memiliki cara untuk melakukan ini dengan elegan. Ini disebut operator penggabungan Null . Anda bisa menggunakannya seperti ini:
Ini setara dengan
sumber
<=>
dan cukup akurat untuk boot!null
nilai. Misalnya, jika$_GET['name']
diatur ke string kosong, baris pertama akan mengembalikan string kosong, tetapi kita bisa mengembalikan "john doe" dengan menggunakan$_GET['name'] ? $_GET['name'] : 'john doe'
.PHP 5.3 memiliki
?:
operator singkatan :Yang menetapkan
$bar
jika itu bukan nilai kosong (saya tidak tahu bagaimana ini akan berbeda dalam PHP dari Perl), jika tidak$baz
, dan sama dengan ini di Perl dan versi PHP yang lebih lama:Tapi PHP tidak memiliki operator penugasan majemuk untuk ini (yaitu, tidak ada yang setara dengan Perl
||=
).Selain itu, PHP akan mengeluarkan bunyi jika
$bar
tidak disetel, kecuali jika Anda mematikan pemberitahuan. Ada juga perbedaan semantik antaraisset()
danempty()
. Yang pertama mengembalikan false jika variabel tidak ada, atau diatur keNULL
. Pengembalian yang terakhir benar jika itu tidak ada, atau diatur untuk0
,''
,false
atauNULL
.sumber
The first returns
alih-alihThe second
dalam kalimat kedua dari belakang Anda.$var = isset($var) ? $var : 'default value';
Dikatakan bahwa dalam jawabannya ... hanya menunjukkannya lagi kepada siapa pun yang melewatkannya. :-DTerima kasih atas semua jawaban hebatnya!
Bagi siapa pun yang datang ke sini untuk alternatif yang mungkin, berikut adalah beberapa fungsi yang membantu menghilangkan kejenuhan dari hal semacam ini.
Contoh:
Saya yakin ini bisa diperbaiki.
sumber
Ungkapan umum untuk tetap kompatibel dengan versi PHP yang lebih lama adalah:
Ini berfungsi untuk nilai-nilai yang dapat dievaluasi dalam konteks boolean. Keuntungannya di sini adalah ia juga memberi Anda kata debug e_notice jika variabelnya tidak ditentukan.
sumber
$bool ? $bool : "default"
jika$bool
tidak ditetapkan?isset($var) ? $var : DEFAULT
. Tapi sepertinya dia ingin menghindari mereka.Dalam PHP lebih awal dari 7. *, orang dapat menggunakan?: Untuk variabel yang tidak ditentukan mengalami kesalahan secara lokal ditekan dengan
@
:sumber
ini adalah format lain yang bagus untuk
isset
kasus iniisset($foo) || $foo= $bar;
cara sederhana lain dan akan memberi Anda lebih banyak kontrol karena Anda dapat menambahkan lebih banyak kondisi dan menetapkan ke variabel lain secara bersamaan
$foo = (isset($oData['foo']))?$bar['foo']:'default value';
sumber
Solusi yang mungkin: defaultFor ()
Kecuali jika kita memiliki solusi pabrik (yang memang sangat menjengkelkan), saya akan merekomendasikan pembantu kecil berikut. Itu melakukan pekerjaan dalam banyak kasus:
Saya harap ini dekat dengan apa yang ingin Anda capai. Ini tidak akan memberi Anda pemberitahuan jika Anda menggunakannya dengan variabel yang tidak ada, dan itu cukup nyaman. Tentunya ia memiliki kekurangan: nilai default selalu dihitung sebelumnya, jadi jangan gunakan apa pun yang berat sebagai parameter kedua, seperti file_get_contents atau sesuatu. Dalam kasus itu, Anda lebih baik mengeluarkan.
sumber