Logicznie
Heh, pierwszy mój wpis zrobiony pod jeszcze świecącym od nowości "Agni"... Ale do rzeczy.
Kończę projekt, nad którym pracuję od jakiegoś czasu, dodając ostatnie opcje (miejmy nadzieję) i usuwając ostatnie (miejmy nadzieję) błędy. Między innymi to, że autologowanie zrobiłem w tak mądry sposób, że jedynie ustawiało ciasteczko, a potem go nie wykorzystywało. Obecnie mechanizm już chyba działa, w każdym razie pisząc go brakło mi w PHP... logiki trójwartościowej (sic!). Czego? Ano logiki, w której mamy trzy wartości - "prawda", "fałsz" i jakiś trzeci dodatkowy stan.
Oczywiście akurat w PHP (czy nawet chyba większości języków) stworzenie logiki trójwartościowej nie jest problemem, bo typ logiczny można zrzutować na typ liczbowy, a praktyczna beztypowość PHP dała mi możliwość zrobienia funkcji która działa mniej więcej tak:
public function check_cookie_and_login()
{
if (!$this->session->userdata('logged_in'))
{
$cookie_data = get_cookie('nino_remember');
if ($cookie_data != false)
{
// deserializacja i deszyfracja ciasteczka
if (// test pary hash hasła i id)
{
// logowanie
return true;
}
else
{
// błąd
return false;
}
}
else
// błąd odczytu ciasteczka
return false;
}
// trzeci stan oznaczający, że użytkownik jest już zalogowany
return 2;
}
Po co te machinacje? A bo funkcja akurat może zwracać kilka stanów, a aplikacja musi odpowiednio na nie reagować - a że programiści są przyzwyczajeni do logicznych wartości "true" oraz "false" to wystarczy takie zwracać oraz dodać do tego ten dodatkowy, trzeci stan, na przykład liczbą 2 oznaczony.
Pytanie teraz - jak powinienem określić w phpDoc typ zwracanych danych: bool czy int?
Swoją drogą to do testu użyłem nieco przesadzonej wartości, bo autologowanie będzie działać dla użytkownika aż do marca 2011 roku... Nie no, tyle to mu chyba nie damy ;-)
01 maja 2007 22:51:35
jak dla mnie int, bo bool mieści się tylko w zbiorach dwuelementowych, np {0,1}, {t,n}, etc. ...
02 maja 2007 00:38:21
ja piszę w takim wypadku ‘mixed’ :) i chyba tak jest nawet przyjęte…
03 maja 2007 08:28:47
Od tego są exceptions…
03 maja 2007 10:47:15
lego: To chyba zależy od podejścia programisty – dla mnie wyjątek następuje wtedy, gdy coś poszło nie tak i trzeba go złapać i obsłużyć żeby program się nie wykrzaczył – a stan działania funkcji (bo każdy z przypadków jest prawidłowy i normalny) zwracany jest przez jej return.