Do ulubionych | Kontakt

Nowości   Projekty   Moim zdaniem   Artykuły   O mnie   Opowiadania   PHP DLL
Panel rozmaitości
 Artykuły
[Programming] Szybki kurs PHP cz. I - wprowadzenie
Data publikacji: 27. listopada 2008 – 01:09 GMT +0100
Mógłbym zacząć od opowiadania jakie to programowanie jest przewspaniałe. Mógłbym podejść do sprawy metodycznie, listując dostępne języki i ich najmocniejsze cechy. Ale nie zrobię tego. Zamiast tego, przejdę od razu do podstaw PHP — swoje własne cele i powody odkryjecie sami, wraz ze wszystkimi przeżyciami programisty.

Programowanie to trochę jak wychowywanie dziecka: tworzysz projekt, opisujesz jego podstawowe założenia, rozwijasz definicje działania i zaczynasz pisać. Każda kolejna linia kodu, każde polecenie to jak drobna kropeczka "kodu DNA" programu. Od momentu powstania do finiszu jest to Twoje "dziecko" – opiekujesz się nim, rozwijasz jego możliwości i umiejętności. Jeśli masz szczęście (nie ukrywam, duża doza szczęścia się bardzo przydaje), ujrzysz dzień gdy Twój program będzie na tyle rozwinięty i bezawaryjny, że udostępnisz go innym – "wyjdzie na świat".


Wybrałem PHP, ponieważ pozwala bardzo szybko i dynamicznie tworzyć dość złożone projekty, nie wymagając od programisty aż tak dogłębnej znajomości systemu jak C++, i jednocześnie nie zajmując większości zasobów systemu jak Java. Owszem, PHP ma dość ograniczony repertuar w porównaniu z tymi językami (sam czasem uciekam się do hacków w C++ aby ominąć jakieś ograniczenie), ale na początek nadaje się świetnie. No i ma ten dodatkowy plus, że można w nim bardzo szybko zacząć pisać strony WWW, czego o "poważnych" językach powiedzieć już nie można.

... i właśnie z tego względu rozpocznę od dynamicznego generowania stron WWW za pośrednictwem PHP. Zakładam, że na tym etapie posiadasz, drogi Czytelniku, zainstalowany i skonfigurowany serwer WWW wraz z parserem PHP (Krasnal wystarczy, aczkolwiek ostrzegam, iż w Krasnalu nie wszystko w PHP będzie działać poprawnie ze względu na... cholera wie co ;P). Zakładam też choć minimalną znajomość języka HTML (dla purystów i semantyków – HTML 4.01 Transitional określony w loose.dtd – ale puryści z definicji znają HTML).

Jeśli czegoś nie zrozumiesz, przeczytaj dany paragraf/sekcję jeszcze raz, lub wróć do tego kursu gdy się wyśpisz. Pomaga.




No to — zaczynamy!




Na dobry początek przekażę Tobie, Czytelniku drogi, garść informacji o samym języku.

0. Interpretacja vs kompilacja (dla tych, którym ta wiedza jest niepotrzebna, proponuję skok do sekcji 1wszej ale jednak gorąco polecam przeczytanie)

Pierwszą bardzo istotną informacją jest fakt, że PHP jest językiem skryptowym — znaczy to tyle, że nie jest w żaden sposób 'kompilowany' do jakiejkolwiek formy kodu wykonalnego (pomijam wewnętrzne działanie silnika Zend). Przedstawiany jest do interpretera PHP w postaci tekstu, i wykonywany linijka po linijce (uogólniam, ale o tym później).

Wiele dzisiejszych języków programowania jest kompilowanych zupełnie (do kodu maszynowego/wykonywalnego) lub niezupełnie (do tzw. bytecode'u [czytaj: bajtkodu]). Interpretacja polega na czytaniu kodu linijka po linijce i wykonywaniu kolejnych instrukcji – kompilacja zaś przemienia czytelny dla człowieka kod danego języka w czytelny dla konkretnej maszyny/typu maszyny kod "mechaniczny", tj. zrozumiały tylko przez maszynę, ale o wiele szybciej.

Prawda jest taka, że komputer rozumie tylko ten język, którego go nauczono w fabryce – tzw. "assembly language" (od "assemble" – składać, montować; "laguage" – język — więc 'język montażu'). W skrócie mówi się na niego "assembler" (nie! nie będę wchodził w detale!). Ten język jest "najbliżej" maszyny – są to instrukcje zrozumiałe w samym jądrze komputera. Im 'bliżej maszyny' jesteśmy, tym szybciej się wszystko odbywa – musimy przechodzić przez mniej "pośredników" typu system operacyjny, sterowniki etc. Dlatego też programy napisane w językach kompilowanych zupełnie (Pascal, C, C++ choćby) działają tak szybko — są przez kompilator "tłumaczone" na język, który komputer rozumie od zaraz. Ale ma to też drugą stronę — taki program po kompilacji działa tylko na tym typie maszyny (tzw. architekturze), dla którego został skompilowany: program skompilowany na x86/IBM PC nie ruszy na Apple Mac, i odwrotnie — trzeba je skompilować dla tych architektur oddzielnie. No i oczywiście programu skompilowanego nie da rady sensownie modyfikować – trzeba wziąć do ręki kod źródłowy, wprowadzić zmiany – i dopiero skompilować ponownie.

Jęzki kompilowane niezupełnie (np. Java) zostały napisane z myślą o działaniu na wielu platformach bez konieczności ingerencji w kod programu po jego napisaniu. Programy w takich językach są kompilowane do bytecode'u, który jest formą "pośrednią" między językiem wysokiego poziomu, a językiem maszynowym. Ma to tę zaletę, że program wykonuje się dość szybko, ale wciąż musi korzystać z pośrednika w postaci platformy wirtualizacyjnej (Java jest bardzo typowym przykładem języka kompilowanego niezupełnie). Taka platforma wirtualizacyjna może być postrzegana jako swojego rodzaju "pragmatyk", zajmujący się przyziemnymi potrzebami (pamięć, dostęp etc.) "idealisty" – tj. programu, który na niej pracuje. Dzięki takiemu podejściu program zostaje napisany tylko raz! – bo specjalnymi potrzebami każdej architektury zajmuje się platforma napisana specjalnie dla danego typu komputera (Apple Macintosh, x86, x64 czy choćby telefony komórkowe). Jednak programu zamienionego w bytecode nie można tak łatwo edytować – owszem, w przypadku plików .jar dla języka Java jest to o niebo łatwiejsze niż w przypadku plików .exe dla języka C++, ale wciąż jest to trudne i mało przyjazne.

Języki interpretowane natomiast (BASIC, PHP, JavaScript) nie są w żaden sposób kompilowane — wykonywane są w tzw. interpretatorze (niektórzy, np. ja, wolą termin 'interpreter' i 'interpreterze', choć to spolszczony wariant angielskiego słowa 'interpreter'). Definicja mówi, że programy takie spośród tych kategorii działają najwolniej — i tak często jest w praktyce (choć nie zawsze!). Mają jednak wielką zaletę w postaci takiej, że kod programu nie jest na nic zamieniany – wykonuje się tak jak jest, i wszelkie modyfikacje w nim natychmiast wpływają na jego zachowanie (oczywiście wciąż należy wykonać go ponownie – w przypadku PHP np. odświeżyć stronę WWW).



1. Separatory kodu, czyli obszar kodu PHP w pliku

Wspomniałem powyżej, że PHP jest językiem interpretowanym. Co to dla nas jeszcze oznacza w praktyce? Na wstępie to, że – jak wiele języków skryptowych – przestrzeń jego działania objęta jest ogranicznikami w kodzie strony HTML.

Dla PHP rolę ograniczników kodu symbolizują znaczniki:

<?php





?>


Oznaczają one odpowiednio "tu zaczynają się instrukcje w języku PHP" oraz "tu się te instrukcje kończą". Przykładowo, aby w kodzie HTML wyświetlić aktualną datę, można posłużyć się takim fragmentem kodu:

<p>Witaj na stronie! Aktualna data to: 
<?php  echo  date("d.m.Y"); ?>.</p>


Możesz takie 'bloki' kodu wstawiać wielokrotnie w zawartości strony, jeśli chcesz wizualnie oddzielić PHP od HTML:

<p>Witaj na stronie, <?php  echo
$Zmienne['Nazwa Uzytkownika']; ?>! 
Aktualna data to: <?php  echo  date("d.m.Y"); ?>.</p>


Ja osobiście preferuję objęcie całego kodu strony blokiem PHP i generowanie całego HTML z tego poziomu, np. tak:

<?php
 echo "<p>Witaj na stronie! Aktualna data to:";
 echo  date("d.m.Y");
 echo ".</p>";
?>


Zasadniczo jest to kwestia gustu — dla generowanej strony HTML nie ma to większego znaczenia. Jest jednak praktyczny powód, dla którego warto stosować wariant drugi — funkcje buforujące, kompresujące, oraz oczywiście – pisanie programów (poza WWW) w języku PHP, gdzie nie ma kodu HTML i gdzie kod jest "od początku do końca" napisany w PHP. Ale o tym również – później. Na tę chwilę możesz wybrać ten wariant, który wydaje Ci się wygodniejszy. Ja na razie mogę używać wariantu pierwszego, ale docelowo w tej serii artykułów pisać będę wariantem drugim.



2. Konwencje i własności języka

— Średniki

PHP jest językiem podobnym składniowo do C++ – oznacza to, że tzw. białe znaki (white–space) lub inaczej znaki niewidoczne, np. spacja, enter czy tab – nie grają roli w interpretacji (wykonaniu) kodu — poza tymi oczywiście, które umieszczone są w stałych i zmiennych. Znaczenie natomiast ma pewien specjalny znaczek – czyli średnik. Średnik wygląda tak:

         ;


Ładny, prawda?

Należy wspomnieć, że średnik – poza funkcją dekoracyjną – pełni także bardzo istotną funkcję praktyczną. Mianowicie, określa koniec instrukcji. To tak, jakby mówić do PHP: "tu kończy się ta instrukcja, następne wyrażenie po tym znaku będzie częścią kolejnej instrukcji". To ważna rzecz, gdyż jak wspomniałem na początku – PHP wykonuje się instrukcja–po–instrukcji.

Chciałbym nieco skorygować swoje słowa — powiedziałem wyżej, że white–space nie gra roli w wykonaniu kodu... ale gra dużą rolę w jego czytelności dla człowieka (np. dla samego programisty)! Dlatego warto kolejne polecenia zaczynać od nowej linii, albo minimalnie oddzielać od siebie choć jedną spacją (są sytuacje, w których jest to wręcz konieczne – dla ciekawskich zadanie polegające na znalezieniu tych sytuacji). Bardzo pomocna jest też praktyka tzw. "indentowania" swojego kodu. "To indent" z jęz. angielskiego – znaczy "robić wcięcia". Warto robić takie wcięcia w kodzie, grupując na tej samej odleglości od lewego marginesu kod dotyczący spójnie jakiejś funkcjonalności (np. treść funkcji, pętle, instrukcje warunkowe etc.). Ci z Was którzy mieli już doświadczenie z innymi językami programowania (choćby PASCAL w szkole) wiedzą, o czym mówię.


— Komentarze

Kolejnym niezastąpionym dla programisty narzędziem–konwencją języka PHP (podobnie do języka C++) są komentarze w kodzie. Część tekstu oznaczona jako komentarz nie jest wykonywana (jest traktowana jako white–space przez interpreter), przydaje się więc właśnie do opisywania co dany kawałek kodu robi, jakich parametrów się spodziewa etc. etc. Przykładowy komentarz może wyglądać tak:

<?php
// wyswietl  date w tym miejscu
 echo "<p>Witaj na stronie! Aktualna data to: ";
 echo  date("d.m.Y");
 echo ".</p>";
?>


Sprytniejsi już zauważyli, co się stało. Podstawową formą komentarza są dwa forwardslashe, tj. znaki "/". Dla PHP oznaczają one: "wszystko, co jest po // to komentarz, nie zaprzątaj sobie tym głowy". Komentarze można umieścić w dowolnym miejscu w kodzie (poza zawartością zmiennej, gdyż wtedy – co wydaje się logiczne – będą częścią zmiennej). Powyższy kawałek kodu można więc przedstawić tak:

<?php
 echo "<p>Witaj na stronie! Aktualna data to: ";
 echo  date("d.m.Y"); // wyswietl  date w tym miejscu
 echo ".</p>";
?>


... i wszystko będzie w porządku.

Zabawna rzecz z komentarzami – wszystko, przed czym stanie // automatycznie staje się komentarzem i jest pomijane przez interpreter. Przydaje się to szczególnie wtedy, gdy chcemy wyłączyć jakąś funkcjonalność kodu na jakiś czas. Załóżmy, że jednak nie chcę wyświetlać daty w tym miejscu – mogę więc "wykomentować" (z ang. "comment out") kod wyświetlający datę, na przykład tak:

<?php
 echo "<p>Witaj na stronie! Aktualna data to: ";
//  echo  date("d.m.Y");
 echo ".</p>";
?>


... i data się już nie wyświetli. Oczywiście pozostanie puste miejsce, wynik będzie taki:

Witaj na stronie! Aktualna data to: .


– ale z tym można sobie poradzić (co zrobić w takim wypadku – to zależy już wyłącznie od programisty).


PHP, oprócz komentarzy "w linii" ('inline comment'), pozwala na tworzenie "bloków komentarza", które obejmują więcej niż jedną linię. Takie 'bloki' przydają się na przykład do rozpisania w detalu czym się funkcja zajmuje, lub kto jest jej autorem etc. etc. Te komentarze, podobnie jak zakres PHP, mają swój początek /* i koniec */. Przykład:

<?php
/* ————————————————————————————————–
* To jest moja 1wsza strona napisana w PHP, wersja 0.0.1 alfa ;–D
*
* a to taki komentarz blokowy :D
* oczywiscie te gwiazdki z lewej strony nie sa konieczne
* w kazdej linii, po prostu wygladaja ladniej ;–)
* Tak samo jak te kreski na gorze i na dole.
*
* Pozdrowienia ;–)
*
* egonfreeman@gmail.com
* ————————————————————————————————– */


 echo "<p>Witaj na stronie! Aktualna data to: ";
 echo  date("d.m.Y");
 echo ".</p>";
?>


Podobnie jak z komentarzem inline, komentarz blokowy może być użyty do 'wyłączenia' fragmentu kodu (lub nawet całego kodu?) z działania. Ma on też tę zaletę, że nie jest ograniczony do jednej linii – można nim więc 'wyłączać' wiele linii kodu jednocześnie (całe funkcje, grupy poleceń etc.).


— Zmienne

PHP, jako pełnoprawny język programowania, posiada zmienne. Odłożę na chwilę sprawę typowania zmiennych (na razie nas to nie obchodzi) – zanim dowiesz się, co to jest typowanie, wypadałoby wiedzieć czym jest zmienna, prawda?

Od razu może powiem, że zmienną deklarujemy poprzedzając ją symbolem dolara ($). Zmienna w PHP może mieć dowolnie długą (bez przesady! istnieją jednak jakieś ograniczenia!) nazwę, zawierającą kombinację słów i znaków. Nazwa zmiennej musi jednak zacząć się od znaku innego niż cyfra, i nie może mieć w środku przerw typu white–space. Warto ograniczyc sie do alfabetu ASCII, a konkretniej – podkreslnika, liter malych i duzych, oraz cyfr. Przykłady poprawnych nazw zmiennych:

$to_jest_zmienna
$ToTezJestZmienna
$__To__Jest__Zmienna
$To_Jest_3_Zmienna______


Przykłady *błędnych* nazw zmiennych:

$9
$Zmienna Jakas Tam
$LubięZmienne


(w trzecim przypadku zauważ polski 'ogonek')


A teraz – co można z nimi zrobić, i po co one komu? Cóż... Komputer, jak to przerośnięte kalkulatory mają w zwyczaju, potrafi wykonywać obliczenia matematyczne. Potrafi oczywiście "nieco" więcej, ale matematyka daje mi najlepszą analogię w tym wypadku. Zmienna – to taki twór, który pozwala na przechowywanie informacji. Nie jest to oczywiście "jakaś" informacja, tylko konkretna, zawsze znana 'wartość' (NULL to także wartość!). Zmienne można wykorzystywać do np. przechowywania wyników operacji matematycznych. Przykładowo, chcemy poznać wartość liczby 2 pomnożonej przez sumę 2 i 3. Najpierw musimy więc znać sumę 2 i 3, na przykład tak:

$suma = 2 + 3;


Następnie mnożymy:

$wynik = 2 * $suma;



Zauważ, drogi Czytelniku, że na końcach instrukcji są średniki. Była o tym mowa wcześniej, ale podkreślam to ponownie — i pewnie będę, do krwotoku gał ocznych – to bardzo ważne, widziałem zbyt wielu "adeptów sztuk tajemnych" oblewających egzaminy z powodu zapomnianego średnika.

Zmienne przydają się nie tylko do przechowywania wyników (czy wyników pośrednich) obliczeń matematycznych, mają multum zastosowań. Jednym z takich przydatnych "trików" jest użycie zmiennej aby uniknąć obliczania/uzyskiwania tego samego wielokrotnie. Jeśli chcemy na przykład wyświetlić datę więcej niż raz w naszym skrypcie, nie musimy za każdym razem wywoływać polecenia date() – możemy sobie tę datę zachować w zmiennej, na przykład tak:

<?php


$AktualnaData =  date("d.m.Y");


// nagłówek strony
 echo "<p>Witaj, przybyszu! Dzisiaj ";
 echo $AktualnaData;
 echo ".</p>";


// dalej jakaś treść strony, coś tam się dzieje
// i w ogóle mecyje
...


// stopka strony


 echo "<p>Strona wygenerowania dnia: ";
 echo $AktualnaData;
 echo ".</p>";


?>



To na tyle w kwestii wprowadzenia. Ciąg dalszy na pewno nastąpi. ;–)


∞ Komentarze (1)

Nick: - wymagane
Mail:   - wymagane (nie będzie pokazany)
Najnowsze
Fatal fear - addendum
[quote 'Fatal fear' excerpt]But I am stuck deeply ...


Linki
PHP.NET - bezcenne źródło wiadomości

AniDB - baza danych tytułów anime

Radio Internetowe Radiosfera

Fanlistingi



















Strona (cc) 2007 - 2010, Marcin Grzechowiak | Niektóre prawa zastrzeżone
Strona napisana dla przeglądarki Firefox (IE ma problemy z divami)
Creative Commons License