Dlaczego kocham PHP!

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

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!

Tags: , , , ,

Podyskutuj na ten temat:

3 Responses to “Dlaczego kocham PHP!”

  1. avatar krzysiek pisze:

    Dawno w PHP nie pisałem, ale założę się że po ustawieniu wyświetlania wszystkich ostrzeżeń (co jest podstawą jeśli chce się cokolwiek w PHP napisać) takowe się w tej sytuacji pojawi, mylę się ?

  2. avatar Marcin Dryka pisze:

    Słuszna uwaga. Po włączeniu błędów:
    error_reporting(E_ALL);
    Otrzymałem:

    Notice: Object of class Pager could not be converted to int in /home/drymek/test.php on line 12
    Notice: Use of undefined constant per_page – assumed ‘per_page’ in /home/drymek/test.php on line 12

    Klasa była używana w symfony, zatem najbardziej prawdopodobne jest to, ze omyłkowo wyszedłem ze środowiska dev. Ot taki zbieg okoliczności niemożliwy w większości innych języków programowania.

  3. Jakoś mnie to nie zaskakuje ;)

Leave a Reply