Posts Tagged ‘fail’
Dlaczego kocham PHP!
Każdego programistę w życiu spotykają chwile doszukiwania się logiki lub chwile zwątpienia w zasady matematyki. Język PHP w znaczącym stopniu ułatwia zaistnienie takiej sytuacji.
Wyobraźmy sobie, potrzebę napisania klasy umożliwiającej stronicowanie wyników. Metoda calculate służy do policzenia dolnego zakresu wyników (strona 5, wyniki 51-60). Całość wygląda następująco:
class Pager
{
private
$page = 1,
$per_page = 10;
public function calculate()
{
return $this->page * $this->per_page - $this-per_page + 1;
}
}
Jedna mała pomyłka. Zamiast
$this->per_page
do kodu wkradło się:
$this-per_page
Co to zmienia? Na pierwszy rzut oka parser PHP powinien poinformować o błędzie… jednak linia kodu zawierająca błąd interpretowana jest następująco:
$this->page // 1
$this->per_page // 10
$this // rzutowane na int to 1, bo obiekt istnieje
per_page // jako stała niezdefiniowana to 0
Wykonywane działanie matematyczne wygląda zatem następująco:
1 * 10 - 1 - 0 + 1
Wynik działania to o dziwo 10… Dlatego kocham PHP!

3
komentarzy