# Sztuczki PHP - nie koniecznie magiczne
Tym razem chciałbym zaprezentować 10 wybranych "sztuczek" w PHP, które czasami naprawdę mogą ułatwić nam życie a nawet spowodować szybsze działanie naszego kodu. O niektórych warto pamiętać, inne mogą posłużyć jako ciekawostka. Niemniej warto się z nimi zapoznać. Jeśli znacie jakieś inne ciekawe - zapraszam do wpisywania ich w komentarzach! :)
1. Tworzenie tablicy x elementowej
Wiele osób często zapomina o tej naprawdę przydatnej funkcji, dzięki której w prosty (i szybki) sposób możemy utworzyć tablicę x elementową wypełniając ją kolejnymi wartościami numerycznymi (z możliwością ustawienia parametru "step"). Nie trzeba pisać pętli tworzącej tablicę, co przy tworzeniu większych tablic jest sporo wydajniejsze.
2. Separator katalogów: DIRECTORY_SEPARATOR
Stała, oznaczająca separator katalogów - bardzo przydatna, szczególnie jeśli nasza aplikacja ma działać na serwerach z różnymi systemami operacyjnymi. Ponieważ jej nazwa jest dość długa i niewygodna przy budowaniu ścieżek, można ją skrócić do postaci:
3. Bezbłędny warunek
Działa teoretycznie tak samo. Różnica jest taka iż, w drugim sposobie (1 == $a) w przypadku gdy popełnimy błąd składniowy pisząc o jeden znak "równa się" za mało (1 = $a) PHP zgłosi nam błąd składni, w pierwszym przypadku błąd nie zostanie zgłoszony. Czasami może nam to zaoszczędzić cenny czas poszukiwań błędu w kodzie...
4. Alternatywny warunek
Alternatywny sposób zapisania warunku (tu z jednoczesnym przypisaniem do zmiennej). Fajna rzecz, szczególnie przy prostych warunkach. Należy jednak nie przesadzać z nadużywaniem tego sposobu gdyż raz, że jest nieco wolniejszy od zwykłego "if" a dwa, przy kolejnych zagnieżdżeniach, kod jest naprawdę nieczytelny...
5. Zmienne zmienne
Co otrzymamy? Oczywiście 'hello'. Tworzenie zmiennych zmiennych czasami może się przydać (np. tworzenie zmiennych na podstawie kluczy tablicy asocjacyjnej). Jednak nie ma co ukrywać - jest to bardziej "zabawka" niż coś co będziemy w codziennym programowaniu wykorzystywali.
6. strlen vs isset
Ponieważ isset w przeciwieństwie do strlen nie jest funkcją a konstrukcją językową PHP jest on znacznie szybszy, co przy częstym wykorzystaniu w kodzie może dać zauważalne przyspieszenie działania skryptu.
7. ctype_digit vs wyrażenia regularne
Gdybyśmy chcieli sprawdzić czy w zmiennej $test (string) są same liczby, możnaby to zrobić na 3 sposoby:
z wykorzystaniem wyrazeń regularnych:
z wykorzystaniem funkcji z rodziny ctype:
Po przeprowadzeniu testów (na 1000 iteracji) okazuje się, że preg_match jest około 7-8 krotnie wolniejszy od ctype_digit natomiast ereg 3-4 razy.Od PHP >= 4.2.0 funkcje ctype są domyślnie włączone, więc naprawdę warto z nich korzystac :)
8. Szybki return.
Często na koniec działania metody / funkcji dokonujemy osobnego sprawdzania warunku lub jakiś decydujących obliczeń które tak naprawde można sprawdzić/wykonać bezpośrednio przy "return".
9. Szybkie wyszukiwanie elementów w tablicy
Czasami warto zamiast zwykłej tablicy numerycznej tworzyć tablicę asocjacyjną przypisując jej kluczom jakąś wartość. Dzięki takiemu podejściu bedziemy mogli użyć isset() zamiast funkcji in_array() przy wyszukiwaniu/sprawdzaniu, co znacznie przyspieszy tą operację (szczególnie jeśli mamy dużo elementów w tablicy).
10. Rozszerzona pętla for
Choć zapis ten jest nie jest jakąś nowością, to jednak z moich doświadczeń wiem, że niewiele osób z niego korzysta, posiłkując się starym sposobem zapisu, czyli:
który jest znacznie wolniejszy (przy 1000 iteracji około 5 razy wolniejszy).
That's all. Życze owocnego programowania :)
1. Tworzenie tablicy x elementowej
$a = range(0,15);
Wiele osób często zapomina o tej naprawdę przydatnej funkcji, dzięki której w prosty (i szybki) sposób możemy utworzyć tablicę x elementową wypełniając ją kolejnymi wartościami numerycznymi (z możliwością ustawienia parametru "step"). Nie trzeba pisać pętli tworzącej tablicę, co przy tworzeniu większych tablic jest sporo wydajniejsze.
2. Separator katalogów: DIRECTORY_SEPARATOR
Stała, oznaczająca separator katalogów - bardzo przydatna, szczególnie jeśli nasza aplikacja ma działać na serwerach z różnymi systemami operacyjnymi. Ponieważ jej nazwa jest dość długa i niewygodna przy budowaniu ścieżek, można ją skrócić do postaci:
define('DS',DIRECTORY_SEPARATOR);
3. Bezbłędny warunek
if($a == 1) vs if(1 == $a)
Działa teoretycznie tak samo. Różnica jest taka iż, w drugim sposobie (1 == $a) w przypadku gdy popełnimy błąd składniowy pisząc o jeden znak "równa się" za mało (1 = $a) PHP zgłosi nam błąd składni, w pierwszym przypadku błąd nie zostanie zgłoszony. Czasami może nam to zaoszczędzić cenny czas poszukiwań błędu w kodzie...
4. Alternatywny warunek
$x = ($v > 1) ? true : false;
Alternatywny sposób zapisania warunku (tu z jednoczesnym przypisaniem do zmiennej). Fajna rzecz, szczególnie przy prostych warunkach. Należy jednak nie przesadzać z nadużywaniem tego sposobu gdyż raz, że jest nieco wolniejszy od zwykłego "if" a dwa, przy kolejnych zagnieżdżeniach, kod jest naprawdę nieczytelny...
5. Zmienne zmienne
$a = 'variable'; $$a = 'hello'; echo $variable;
Co otrzymamy? Oczywiście 'hello'. Tworzenie zmiennych zmiennych czasami może się przydać (np. tworzenie zmiennych na podstawie kluczy tablicy asocjacyjnej). Jednak nie ma co ukrywać - jest to bardziej "zabawka" niż coś co będziemy w codziennym programowaniu wykorzystywali.
6. strlen vs isset
$test = 'abcd';
if (strlen($test) < 5) {
echo "ciag jest za krotki";
}
// vs
if (!isset($test{5})) {
echo "ciag jest za krotki";
}
Ponieważ isset w przeciwieństwie do strlen nie jest funkcją a konstrukcją językową PHP jest on znacznie szybszy, co przy częstym wykorzystaniu w kodzie może dać zauważalne przyspieszenie działania skryptu.
7. ctype_digit vs wyrażenia regularne
$test = '123';
Gdybyśmy chcieli sprawdzić czy w zmiennej $test (string) są same liczby, możnaby to zrobić na 3 sposoby:
z wykorzystaniem wyrazeń regularnych:
preg_match("![0-9]+!", $test);
// lub
ereg('^[0-9]+',$test)
z wykorzystaniem funkcji z rodziny ctype:
ctype_digit($test);
Po przeprowadzeniu testów (na 1000 iteracji) okazuje się, że preg_match jest około 7-8 krotnie wolniejszy od ctype_digit natomiast ereg 3-4 razy.Od PHP >= 4.2.0 funkcje ctype są domyślnie włączone, więc naprawdę warto z nich korzystac :)
8. Szybki return.
if ($a == 5) {
return true;
}
// lepiej:
return ($a == 5);
Często na koniec działania metody / funkcji dokonujemy osobnego sprawdzania warunku lub jakiś decydujących obliczeń które tak naprawde można sprawdzić/wykonać bezpośrednio przy "return".
9. Szybkie wyszukiwanie elementów w tablicy
$keys = array("js", "php", "ajax", "jquery");
if (in_array('jquery', $keys)) {}
// vs
$keys = array("js" => 1, "php" => 1, "ajax" => 1, "jquery" => 1);
if (isset($keys['jquery'])) {}
Czasami warto zamiast zwykłej tablicy numerycznej tworzyć tablicę asocjacyjną przypisując jej kluczom jakąś wartość. Dzięki takiemu podejściu bedziemy mogli użyć isset() zamiast funkcji in_array() przy wyszukiwaniu/sprawdzaniu, co znacznie przyspieszy tą operację (szczególnie jeśli mamy dużo elementów w tablicy).
10. Rozszerzona pętla for
for($i=0,$ile=count($tablica); $i<$ile; $i++){}
Choć zapis ten jest nie jest jakąś nowością, to jednak z moich doświadczeń wiem, że niewiele osób z niego korzysta, posiłkując się starym sposobem zapisu, czyli:
for($i=0; $i<count($tablica); $i++){}
który jest znacznie wolniejszy (przy 1000 iteracji około 5 razy wolniejszy).
That's all. Życze owocnego programowania :)
kategoria: Laboratorium | komentuj | 4 komentarze
