Ternary operator w PHP
Jakiś czas temu bawiłem się skróconą wersją konstrukcji IF, czyli tzw. ternary operator. O samym operatorze można poczytać w manualu PHP. A tutaj zamieszczam krótki przykład do walidacji pól checkbox formularza - wymusza ścisłą kontrolę nad wartością przesłanych danych i zawsze zwraca wartość - pozytywną (ustawiony na "tak" albo "true"), negatywną ("nie" albo "false"), oraz dla (jeszcze) nieustawionych wartość domyślną.
Zakładając, że wartość "włączonego" checkboxa - "prawda" lub "true" będzie oznaczana jako 1, a wartość "wyłączonego" - "fałsz", "false" jako 0, a wartością domyślną będzie "1" lub "0".
Normalnie przy użyciu IF-a moglibyśmy napisać:
<?php
// jeżeli pole jest ustawione (znajduje sie w bazie/tablicy), to może przyjąć tylko dwie wartości - 0 lub 1
if(isset($field))
{
// jeżeli pole równe jest jeden, to wartość będzie równa 1, w przeciwnym wypadku 0
if($field == 1)
$value = $field;
else
$value = 0;
}
else // pole nie istnieje w ogóle, wiec możemy nadać mu wartość domyślną
{
$value = $default;
}
Natomiast skrócona wersja z wykorzystaniem ternary operatora będzie wyglądać następująco:
$value = (isset($field)) ? ($field == 1) ? $field : 0 : $default;
Uruchomiłem kilka testów:
<?php
// oczekuje $default
// $field = 1; //oczekuję 1
// $field; // oczekuje $default
// $field = 0; //oczekuje 0
$default = 1;
$value = (isset($field)) ? ($field == 1) ? $field : 0 : $default;
echo $value;
Każdy komentarz to kolejny test:
$value = (isset($field)) ? ($field == 1) ? 1 : 0 : $default;
Zakładając, że wartość "włączonego" checkboxa - "prawda" lub "true" będzie oznaczana jako 1, a wartość "wyłączonego" - "fałsz", "false" jako 0, a wartością domyślną będzie "1" lub "0".
Normalnie przy użyciu IF-a moglibyśmy napisać:
<?php
// jeżeli pole jest ustawione (znajduje sie w bazie/tablicy), to może przyjąć tylko dwie wartości - 0 lub 1
if(isset($field))
{
// jeżeli pole równe jest jeden, to wartość będzie równa 1, w przeciwnym wypadku 0
if($field == 1)
$value = $field;
else
$value = 0;
}
else // pole nie istnieje w ogóle, wiec możemy nadać mu wartość domyślną
{
$value = $default;
}
Natomiast skrócona wersja z wykorzystaniem ternary operatora będzie wyglądać następująco:
$value = (isset($field)) ? ($field == 1) ? $field : 0 : $default;
Uruchomiłem kilka testów:
<?php
// oczekuje $default
// $field = 1; //oczekuję 1
// $field; // oczekuje $default
// $field = 0; //oczekuje 0
$default = 1;
$value = (isset($field)) ? ($field == 1) ? $field : 0 : $default;
echo $value;
Każdy komentarz to kolejny test:
- Jeżeli nie ustawimy pola $field w ogóle - zwrócona zostaje wartość $default.
- $field ustawione na 1 - formuła zwraca 1
- Pole $field istnieje ale jest puste - zwrócona zostaje wartość $default
- W tym teście cokolwiek podstawimy pod wartość $field zostanie zwrócone jako wartość $value. Dlatego warto rozważyć zamienienie w formule ostatniego $field na naszą wartość - ustawiony. W ten sposób będziemy pewni że w naszej bazie zawsze wyląduje albo wartość 1 albo 0:
$value = (isset($field)) ? ($field == 1) ? 1 : 0 : $default;
Brak komentarzy:
Prześlij komentarz