Posts Tagged ‘bug’

Dlaczego kocham PHP!

Author: Marcin Dryka (drymek) | listopad 19th, 2009

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!