Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!
Kategorie

Kategorie

Kategoria wyżej
O autorze

O autorze

Aleksander (olo) Dutkowski
Reklama

Reklama

Najczęściej popełniane błędy początkujących programistów

Każdy człowiek popełnia błędy - programista także, szczególnie początkujący. Ileż to razy zaglądaliśmy do kodu pisanego kilka miesięcy wcześniej i ze zdumieniem zauważaliśmy, ile było tam błędów. Ten artykuł, przeznaczony dla początkujących koderów, ma na celu wyrobienie u nich właściwych nawyków i pisania dobrych, sprawnych i szybkich programów.

Artykuł podzieliłem na trzy części: "Składnia" opisuje błędy które niekoniecznie muszą doprowadzić do zatrzymania programu, ale ich unikanie bardzo umila życie; część "bezpieczeństwo" opisuje błędy, które także nie zatrzymują programu, ale tworzą w nim luki, które mogą wykorzystać krakerzy; zaś "błędy logiczne" opisuje błędy wynikające z niewłaściwej metody rozumowania. Zapraszam do lektury!

Składnia

Brak średnika i literówki

Najczęściej popełniane błędy. Ich wynikiem jest zatrzymanie programu, oraz wyświetlenie komunikatu podobnego do tego:

Rozwiązaniem takiego błędu jest wstawienie średnika w odpowiedniej linii (zazwyczaj w linii n - 1 ). Musimy pamiętać, że w przypadku błędu składni (literówka lub brak średnika), wystąpi błąd 'syntax error'. Osobnego rozpatrzenia wymagają tablice asocjacyjne. Musimy pamiętać, że nazwy kluczy takich tablic zapisujemy w cudzysłowach lub apostrofach:

<?php
       
 $array['klucz'] = 1; //dobrze
 $array["klucz2"] = 2; // dobrze
 $array[klucz3] = 3; // źle
       
 ?>
Brak wcięć i odpowiedniego formatowania kodu

Wcięcia oraz formatowanie kodu zwiększa jego czytelność, a co za tym idzie łatwość modyfikacji, jak i znalezienia potencjalnego błędu. Do wyżej wymienionego formatowania kodu zaliczamy stosowanie zawsze nawiasów klamrowych, spacji w nawiasach zwykłych (przy parametrach funkcji), obok operatorów oraz za przecinkiem i średnikiem (jeżeli ma być jeszcze coś po nim napisane, np.: w pętli for). Spójrzmy na dwa przykładowe kody - pierwszy bez formatowania, oraz drugi, zawierający wyżej wymienione wskazówki:

<?php
       
 for($i=0;$i<count($userzy);$i++) 
 {
     if($user[$i]['status']=='nowy') 
         return false; 
 }

 $query='SELECT * FROM jakas_tabela';
 $query2=mysql_query($query);

 while($result=mysql_fetch_assoc($query2)) 
 {
     echo "$result['user'] ma $result['ile_plikow'] plików";
     if($result['ile_plikow']>10) 
     {
         echo "ten user ma za dużo plików"; 
     } 
 }
       
 ?>
<?php
       
 for( $i=0; $i < count( $userzy );$i++ )
 {
     if( $user[$i]['status'] == 'nowy' )
     {
         return false;
     }
 }
 $query = 'SELECT * FROM jakas_tabela';
 $query2 = mysql_query( $query );
 while( $result = mysql_fetch_assoc( $query2 ) )
 {
     echo "$result['user'] ma $result['ile_plikow'] plików";
     if( $result['ile_plikow'] > 10)
     {
         echo 'Ten user ma za dużo plików.';
     }
 }
       
 ?>

Prawda, że czytelniej?

Brak optymalizowania skryptu

zacja skryptów to bardzo ważna i pomijana przez programistów sprawa. Może się wydawać, że zoptymalizowanie programu z 0.012 do 0.005 sekundy to nic, ale przy 2000 odwiedzin daje to widoczne zwiększenie szybkości. Spójrzmy na pętlę z pierwszego przykładu:

<?php
       
 for( $i=0; $i < count( $userzy );$i++ )
 {
     if( $user[$i]['status'] == 'nowy' )
     {
         return false;
     }
 }
       
 ?>

Po przeanalizowaniu pętli można stwierdzić, że za każdą iteracją wykonywana jest funkcja count(), mimo że jest to niepotrzebne i może być wykonane tylko raz:

<?php
       
 for( $i=0, $liczba_userow = count( $userzy ); $i < $liczba_userow ;$i++ )
 {
     if( $user[$i]['status'] == 'nowy' )
     {
         return false;
     }
 }
       
 ?>
Kłopotliwe stosowanie header()

Często podczas wysyłania headerów, np. w takim skrypcie:

<?php
       
 echo 'To jest strona główna'; // jakaś funkcja wysyłająca dane do przeglądarki
 if( !$isAdmin )
 {
     header('WWW-Authenticate: Basic realm="Admin "' );
     header('HTTP/1.0 401 Unauthorized' );
     echo 'Zły login/hasło.';
     exit;
 }
 else
 {
     echo 'Dobry login/hasło';
 }
       
 ?>

otrzymujemy następujący komunikat:

Oznacza to, że już jakieś informacje zostały wysłane do przeglądarki (echo, print, czy nawet spacja przed <?php ). Rozwiązaniem problemu jest skasowanie wszystkiego przed <?php, lub wpisanie na początku pliku funkcji uruchamiającej buforowanie: ob_start(). Gdy chcemy opróżnić bufor wywołujemy funkcję ob_flush() (bez kończenia buforowania), lub ob_end_flush() (kończy buforowanie):

<?php
       
 ob_start();
 echo 'To jest strona główna'; // jakaś funkcja wysyłająca dane do przeglądarki
 if( !$isAdmin )
 {
     header('WWW-Authenticate: Basic realm="Admin "' );
     header('HTTP/1.0 401 Unauthorized' );
     echo 'Zły login/hasło.';
     exit;
 }
 else
 {
     echo 'Dobry login/hasło';
 }
 ob_end_flush();
       
 ?>
Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (0)
Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System