1. Zmienne Skalary

Podobne dokumenty
1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce.

Podstawy Programowania C++

Dynamiczne przetwarzanie stron. dr Beata Kuźmińska-Sołśnia

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Cw.12 JAVAScript w dokumentach HTML

2. Łańcuchy tekstowe w PHP

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Pętle. Dodał Administrator niedziela, 14 marzec :27

Programowanie w języku Python. Grażyna Koba

Podstawy programowania skrót z wykładów:

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

JAVAScript w dokumentach HTML (1)

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

Ćwiczenie 1. Wprowadzenie do programu Octave

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

do drukowania tekstu służy funkcja echo <?php echo "hello world!";?> jeżeli użyjemy jej kilka razy: <?php

Oczywiście plik musi mieć rozszerzenie *.php

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

PHP: bloki kodu, tablice, obiekty i formularze

Umieszczanie kodu. kod skryptu

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Podstawy programowania w języku C

Pętla for. Wynik działania programu:

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Pętle. for, while, do... while, foreach. Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania w C++

LibreOffice Calc VBA

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

Wykład 2 Składnia języka C# (cz. 1)

Odczyt danych z klawiatury Operatory w Javie

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Narzędzia informatyczne w językoznawstwie

Personal Home Page PHP: Hypertext Preprocessor

4. Funkcje. Przykłady

Ćwiczenie 1. Wprowadzenie do programu Octave

7. Pętle for. Przykłady

Stałe definiuje się używając funkcji define. Przykład: define( PODATEK, 22); define( INSTALACJAOS, 70); define( MS, Microsoft );

Podstawy JavaScript ćwiczenia

APLIKACJE INTERNETOWE 5 PHP W P R O W A D Z E N I E D O P R O G R A M O W A N I A

Podstawy i języki programowania

Podstawy Programowania Podstawowa składnia języka C++

JAVASCRIPT PODSTAWY. opracowanie: by Arkadiusz Gawełek, Łódź

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Struktura pliku projektu Console Application

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY.

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Część 4 życie programu

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Podstawy i języki programowania

Napisy w PHP. Drukowanie napisów instrukcją echo

ZMIENNE. Podstawy PHP

Języki skryptowe w programie Plans

Zmienne, stałe i operatory

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

Wprowadzenie do Scilab: podstawy języka Scilab

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Przetwarzanie sygnałów

Należy ściągnąć oprogramowanie Apache na platformę

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

1. Wprowadzenie do języka PHP

Każde wykonanie bloku instrukcji nazywamy pojedynczym przebiegiem lub iteracją pętli.

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Powtórka algorytmów. Wprowadzenie do języka Java.

Tablice cz. I Tablice jednowymiarowe, proste operacje na tablicach

lekcja 8a Gry komputerowe MasterMind

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

Krótki kurs JavaScript

Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak:

Podstawy programowania w języku C i C++

Programowanie komputerowe. Zajęcia 3

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

JAVAScript w dokumentach HTML - przypomnienie

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

Bazy Danych i Usługi Sieciowe

Tablice. Jones Stygar na tropie zmiennych

Transkrypt:

Podstawy języka PHP 1. Zmienne 1.1. Skalary 1.2. Tablice 1.3. Operatory arytmetyczne 1.4. Operatory przypisania 1.5. Operatory warunkowe i porównania 1.6. Pętle 1.7. Dodatkowe informacje o tablicach tablice asocjacyjne 1.8. Tablice wielowymiarowe 1

1. Zmienne Pojęcie zmiennej znasz już z innych języków programowania (np. JAVA). Przypomnijmy je jednak zmienna w programie komputerowym to wielkość przybierająca wartości przypisane przez algorytm wykonania programu. Mówiąc językiem potocznym zmienna jest podręcznym schowkiem, w którym programy komputerowe przechowują różne wartości potrzebne do poprawnego działania. W nowoczesnych językach programowania liczba zmiennych jest ograniczona jedynie wielkością pamięci komputera. Wszystkie zmienne programu są rozróżniane przez swoje nazwy. Dodatkowo języki kompilowane, takie jak JAVA czy C++, wymagają, aby programista z góry zadeklarował, jakiego typu wartości będą przechowywane w poszczególnych zmiennych. W językach tych typ zmiennej nie ulega zmianie przez cały czas wykonania programu. W PHP korzystanie ze zmiennych zostało maksymalnie uproszczone. Nie przywiązuje się tu żadnej wagi do tego, jaki rodzaj danych zawiera zmienna. Możesz używać zmiennej do przechowywania dowolnej wartości, a PHP sam zadba o poprawne jej wykorzystanie. 1.1. Skalary Perl rozróżnia dwa podstawowe typy danych: skalary i tablice. Skalary służą do przechowywania pojedynczych elementów. Listy związane są ze zbiorami elementów, takich jak tablice. Nie trzeba ich w żaden specjalny sposób deklarować. Do utworzenia zmiennej skalarnej służy znak dolara ("$"), po którym następuje nazwa zmiennej. Musi ona zaczynać się literą lub znakiem podkreślenia i może zawierać dowolną liczbę liter, cyfr i podkreśleń. Odróżniane są duże i małe litery ($Abc i $abc są więc rozróżniane). PHP obecnie obsługuje następujące typy zmiennych skalarnych: boolean typ logiczny, integer liczba całkowita, double liczba rzeczywista, string tekst. Oto kilka przykładów przypisania wartości do skalarów: $liczba = 8; 2

przypisuje zmiennej $liczba liczbę całkowitą 8. Jak widać znak równości, podobnie jak w innych językach, oznacza operację przypisania wartości do zmiennej. $liczba = 3.456; przypisuje zmiennej $liczba liczbę zmiennoprzecinkową (kropka oddziela część całkowitą od ułamkowej). $liczba = 2e-5; przypisuje zmiennej $liczba liczbę w postaci wykładniczej. $liczbaosemkowa = 016; przypisuje zmiennej $liczba liczbę zapisaną ósemkowo (zero na początku). $liczbaszesnastkowa = 0x3c; przypisuje zmiennej $liczba liczbę zapisaną szesnastkowo (0x na początku). Zwróć uwagę, że dowolny język programowania jest językiem międzynarodowym, dlatego nazwy zmiennych nie powinny zawierać ani białych znaków (spacja, tabulacja), ani polskich znaków diakrytycznych. Poza liczbami zmienne mogą przechowywać także dowolne ciągi znaków (łańcuchy). Oto kilka przykładów tego typu zmiennych: $lancuch = "Dowolny łańcuch znaków"; przypisuje zmiennej $lancuch ciąg znaków ujęty w cudzysłowy po prawej stronie znaku równości. Jeżeli chcemy w tekście umieścić cudzysłów, należy poprzedzić go znakiem "\". To samo dotyczy znaku "$". W celu umieszczenia wewnątrz tekstu znaku "\" należy napisać "\\". Aby umieścić w tekście znak nowej linii, można użyć sekwencji "\n". Wewnątrz tekstu można też użyć zdefiniowanych wcześniej zmiennych: $a=3; $b="jakaś wartość"; $c="$a, $b"; 3

Zmienna $c będzie miała wartość "3, Jakaś wartość". $lancuch = 'Dowolny łańcuch znaków'; Ta linia programu pozornie wygląda identycznie jak poprzednia, dotycząca zmiennej $lancuch. Zwróć jednak uwagę, że w miejscu cudzysłowów pojawiły się apostrofy. Różnicę zobaczymy na przykładzie. Utwórz w głównym katalogu serwera (htdocs) plik o nazwie wyplata.php i następującej treści: <html> <head> <title>wyplata</title> </head> <body> <?php $napis = "Oto moja wyplata"; $wyplata = "5 zl"; $interpretowany = "Otrzymalem $wyplata \n"; echo $interpretowany; $doslowny = 'Otrzymalem $wyplata'; echo $doslowny;?> </body> </html> Teraz, korzystając z przeglądarki internetowej, otwórz wcześniej utworzony plik, podając jego adres, czyli http://localhost/wyplata.php. Okno przeglądarki powinno zawierać informacje jak na poniższym rysunku. 4

Czy widzisz już różnicę między cudzysłowami i apostrofami? Prześledźmy dokładnie program. Zaczynamy od linii następującej po znaczniku <?php, czyli od początku kodu PHP. W linii pierwszej przypisujemy zmiennej $napis ciąg znaków "Oto moja wyplata". Druga linia to przypisanie zmiennej $wyplata ciągu znaków "5 zl". W trzeciej, zmiennej $interpretowany przypisujemy ciąg znaków "Otrzymalem $wyplata \n". Czwarta linia wywołuje funkcję echo, w celu wypisania na ekranie zawartości zmiennej $interpretowany. Na ekranie pojawia się więc napis: Otrzymalem 5 zl. Zastanów się chwilę nad tą linią, mamy w niej aż dwa nowe elementy języka. Po pierwsze, argumentem funkcji echo wcale nie musi być ciąg znaków zapisany wprost po słowie echo, może nim być również nazwa zmiennej. W takim przypadku na ekranie pojawi się zawartość tej zmiennej. Po drugie, zwróć uwagę na sposób, w jaki PHP traktuje zawartość zmiennej $interpretowany. Przechowuje ona ciąg znaków, w którym umieszczono nazwę innej zmiennej ($wyplata). Na ekranie nie pojawiła się nazwa tej zmiennej, lecz jej zawartość! Zupełnie inaczej sytuacja przedstawia się w liniach piątej i szóstej. Podobnie jak poprzednio, zmienna $doslowny przechowuje ciąg znaków zawierający nazwę zmiennej $wyplata. Tym razem jednak wywołanie funkcji echo $doslowny w linii szóstej, spowoduje wypisanie zawartości zmiennej $dosłowny bez podstawiania wartości zmiennej $wyplata. Przyczyną różnicy w działaniu obu instrukcji echo jest różnica funkcjonalności między cudzysłowami i apostrofami. Łańcuch znakowy otoczony apostrofami jest zawsze 5

przetwarzany (np. drukowany) bez jakichkolwiek zmian. Łańcuch otoczony cudzysłowami jest za każdym razem interpretowany, co oznacza, że wszystkie nazwy występujących w nim zmiennych są zastępowane ich wartościami. Pozostaje jeszcze wyjaśnić, po co w ciągu znaków zmiennej $interpretowany wstawiono dziwny symbol "\n". Jest to uniwersalny znak końca linii. Gdyby go nie było, oba napisy zostałyby wydrukowane w jednej linii, jeden za drugim (sprawdź to samodzielnie, modyfikując program). Znak specjalny "\n" musi także zostać poprawnie zinterpretowany, będzie on funkcjonował prawidłowo jedynie w łańcuchach otoczonych cudzysłowami. 1.2. Tablice PHP pozwala na grupowanie skalarów. Tablica jest rozbudowanym typem zmiennej skalarnej, która potrafi przechowywać wiele wartości. Są one przechowywane w bardzo zwartej formie. Każdy element ma swój indeks, co oznacza, że poszczególne elementy tablicy są ponumerowane. Pierwszy element ma indeks 0, drugi 1 i tak dalej. Należy zauważyć, że każdy element tablicy jest wartością skalarną (pojedynczą wartością). Identyfikator zmiennej tablicowej składa się z trzech części: znaku $, nazwy oraz pary nawiasów kwadratowych [ ] zawierających indeks elementu tablicy. Nazwa tablicy podlega identycznym ograniczeniom, co nazwa skalara. Aby stworzyć tablicę, wystarczy przypisać wartość któremuś z jej pól: $tablica[0]="wartość pola 0"; $tablica[1]="wartość pola 1"; $tablica[2]="wartość pola 2"; $tablica[3]="wartość pola 3"; $tablica[4]="wartość pola 4"; Jako indeksu można użyć innej zmiennej, np.: $indeks=5; $tablica[$indeks]=100; Można też definiować tablice za pomocą operatora array. @lancuchy = array('styczeń', 'luty', 'marzec', 'kwiecień'); 6

definiuje tablicę zawierającą cztery łańcuchy znakowe. @pusta =array(); definiuje tablicę pustą. @rozne = array(3.25, 'wtorek', $zmienna, 3+5, 1024); definiuje tablicę zawierającą pięć elementów o różnych typach. Pierwszy element tablicy @rozne jest liczbą zmiennoprzecinkową, drugi łańcuchem znaków, trzeci wartością skalara $zmienna, czwarty wynikiem działania 3 + 5, piąty liczbą całkowitą. Zwróć uwagę na to, że tablice działają zupełnie podobnie jak w języku Perl. Języki, takie jak JAVA czy C++ wymagają, aby wszystkie elementy tablicy były tego samego typu, zadeklarowanego w programie przed pierwszym użyciem i niezmiennego do końca działania aplikacji. W PHP tablic (podobnie jak skalarów) nie trzeba deklarować ani definiować. Pierwsze użycie zmiennej jest równoznaczne z automatyczną deklaracją i definicją. W PHP wprowadzono jeszcze jedno udoskonalenie. Można wstawić element do tablicy, nie martwiąc się w ogóle numerem indeksu. Następujący zapis: $tablica[]=999; doda do tablicy o nazwie $tablica element o wartości 999 i indeksie o jeden większym od najwyższego indeksu używanego do tej pory w tej tablicy. Dotychczasowe wpisy do $tablica wskazują, że nowo nadanym indeksem będzie liczba 6. Programiści Perla bardzo zazdroszczą tego mechanizmu. Przyjrzyjmy się teraz sposobowi korzystania z wartości zapisanych w tablicach. Każda z nich ma swój adres, zwany indeksem. Indeksy są liczbami całkowitymi i rozpoczynają się od zera. To bardzo ważne pierwszy element tablicy ma indeks zero, a więc piąty będzie miał indeks 4. Oto przykład poleceń programu, pozwalający na odczyt wybranego elementu tablicy: $zmienna = $rozne[1]; przypisuje do skalara $zmienna, wartość zapamiętaną pod indeksem jeden w tablicy rozne. 7

Tablice w PHP, podobnie jak tablice w Perlu, mają jeszcze jedną zaletę. Programista może w sposób zupełnie dowolny i całkowicie według własnego uznania przyznawać indeksy do poszczególnych elementów tablic. Nie ma konieczności ciągłej numeracji indeksów ani wcześniejszego deklarowania rozmiarów tablic. I tak na przykład poniższy kod: $liczby = array(2, 18, 9, 16); $liczby[10] = 15; $liczby[100] = 20; początkowo deklaruje czteroelementową tablicę liczby, po czym dodaje do niej dwa elementy o indeksach 10 i 100. W efekcie powstaje sześcio-, a nie jak wynikałoby z numeracji indeksów stuelementowa tablica. Warto w tym miejscu zadać pytanie, jak zachowa się program w PHP przy próbie odczytu wartości z nieistniejącego elementu. Sprawdźmy to na przykładzie: <html> <head> <title>tablice</title> </head> <body> <?php $liczby = array(2, 18, 9, 16); $liczby[10] = 15; $liczby[100] = 20; echo $liczby[10]; echo "<BR>"; echo $liczby[222]; echo "<BR>"; echo $liczby[100];?> </body> </html> W czwartej linii program (przypomnijmy, że linie programu liczymy dopiero od wystąpienia znacznika <?php ) wyświetla na ekranie wartość elementu tablicy o indeksie 10. W linii piątej przechodzi do nowej linii, aby liczby nie były drukowane jedna za drugą. Zwróć uwagę, że zamiast znaku \n zastosowano zwykły znacznik <BR>. Jak widać PHP 8

doskonale radzi sobie z takimi sytuacjami. W szóstej drukuje element tablicy o nieistniejącym wcześniej indeksie 222. Kolejne linie to ponownie przejście do nowej linii i wydruk elementu o indeksie 100. Każdy z poznanych dotychczas języków deklaratywnych, takich jak JAVA czy C++ w linii szóstej wyświetliłby błąd, polegający na przekroczeniu rozmiaru tablicy. A co na to PHP? Podobnie jak Perl wyświetli po prostu wartość pustą. Dlaczego tak się stało? Wyjaśnienie jest bardzo proste. Wiesz już, że zmiennych w języku PHP, podobnie jak w Perl, nie trzeba inicjować przed użyciem. W rzeczywistości pierwsze użycie nazwy zmiennej jest jej automatyczną deklaracją. W momencie deklaracji zmienna zostaje zainicjowana wartością pustą (NULL). Tak też stało się w naszym przykładzie. Element tablicy $liczby[222] został zainicjowany w momencie odczytania tego zapisu przez interpreter, a następnie pusta wartość została przekazana do funkcji drukującej echo(). Efekt już znasz na ekranie pojawiła się pusta linia. Jak widzisz, tablice są proste w zastosowaniu i bardzo wygodne. Nie musisz nic deklarować, podajesz nazwę i stosujesz je praktycznie bez ograniczeń. Praktycznie, gdyż istnieje jedno ograniczenie, za które PHP, tak jak Perl, jest krytykowany: tablice w PHP są jednowymiarowe! Istnieją rozwiązania pozwalające na tworzenie bardziej zaawansowanych struktur (tablice złożone z tablic), ale ich zastosowanie nie jest już tak proste i oczywiste. Nie przywiązujmy jednak zbyt wielkiej wagi do tego ograniczenia. W 95% programów, które chciałbyś napisać w PHP, nie będzie Ci ono w ogóle przeszkadzać. 9

1.3. Operatory arytmetyczne Podstawowymi operacjami wykonywanymi w prawie każdym programie są operacje arytmetyczne. W PHP operatory arytmetyczne są identyczne z operatorami stosowanymi w innych językach oprogramowania, dlatego też ograniczę się jedynie do ich wymienienia w treści przykładu. Aby zapoznać się z operatorami, przeanalizuj i uruchom następujący kod: <html> <head> <title>operatory</title> </head> <body> <?php echo "OPERATORY ARYTMETYCZNE<BR>"; $a = 20; $b = 6; echo "zmienna a = $a, "; echo "zmienna b = $b <BR>"; echo "Dodawanie: $a + $b = "; echo $a + $b; echo "<BR>"; echo "Odejmowanie: $a - $b = "; echo $a - $b; echo "<BR>"; echo "Mnozenie: $a * $b = "; echo $a * $b; echo "<BR>"; echo "Dzielenie: $a / $b = "; echo $a / $b; echo "<BR>"; echo "Modulo (reszta z dzielenia): $a % $b = "; echo $a % $b; echo "<BR>"; $a = $a.$b; echo $a;?> </body> </html> 10

W programie zostały wykorzystane jedynie wiadomości omawiane na wcześniejszych stronach kursu, nie powinieneś mieć więc żadnych problemów z jego przeanalizowaniem. Zwróć jedynie uwagę na różnicę między znakami "/" i "\". Pierwszy jest operatorem dzielenia, drugi definiuje następujący po nim znak jako znak specjalny (np. \n koniec linii). 1.4. Operatory przypisania Dobrym uzupełnieniem operatorów arytmetycznych są operatory przypisania. Przedstawię je w postaci tabeli: Operator Przykład Opis Zwykły zapis = $a = 5 przyporządkuj prawą $a = 5 stronę lewej stronie += $a += 5 dodaj prawą stronę do lewej strony -= $a -= 6 odejmij prawą stronę od lewej strony *= $a *= 7 pomnóż lewą stronę przez prawą stronę /= $a /= 8 podziel lewą stronę przez prawą stronę %= $a %= 9 przyporządkuj lewej stronie resztę z dzielenia lewej strony przez prawą.= $a.= 10 przyporządkuj lewej $a = $a + 5 $a = $a - 6 $a = $a * 7 $a = $a / 8 $a = $a % 9 $a = $a.10 stronie wynik połączenia łańcuchów prawej i lewej strony Wpisz do swojego edytora następujący program, zapisz w głównym katalogu serwera (HTDOCS) jako plik o nazwie przypisanie.php, a następnie, korzystając z przeglądarki internetowej, otwórz wcześniej utworzony plik, podając jego adres, czyli http://localhost/przypisanie.php. 11

<html> <head> <title>przypisanie</title> </head> <body> <?php echo "OPERATORY Przpisania<BR>"; $a = 20; $b = 6; echo "zmienna a = $a, "; echo "zmienna b = $b <BR>"; echo 'Dodawanie: $a += $b '; $a += $b; echo $a."<br>"; $a = 20; $b = 6; echo 'Odejmowanie: $a -= $b '; $a -= $b; echo $a."<br>"; $a = 20; $b = 6; echo 'Mnozenie: $a *= $b '; $a *= $b; echo $a."<br>"; $a = 20; $b = 6; echo 'Dzielenie: $a / $b = '; $a /= $b; echo $a."<br>"; $a = 20; $b = 6; echo 'Modulo (reszta z dzielenia): $a %= $b '; $a %= $b; echo $a."<br>"; $a = 20; $b = 6; echo 'Konkatenacja: $a.= $b '; $a.=$b; echo $a;?> </body> </html> Jeżeli wszystko wykonałeś prawidłowo, powinieneś osiągnąć następujący efekt: 12

Warto zapamiętać i dobrze zrozumieć te operatory. Programiści wszelkich języków skryptowych, a więc także PHP często ich używają, podobnie jak operatorów inkrementacji i dekrementacji. Ich działanie znasz z pewnością z JAVY lub Perla, dlatego zamieszczona tu zostanie tylko krótka tabelka przypominająca ich działanie: ++$a zwiększ $a o 1 i zwróć wartość $a++ zwróć wartość, po czym zwiększ $a o 1 --$a zmniejsz $a o 1 i zwróć wartość $a-- zwróć wartość, po czym zmniejsz $a o 1 Powróćmy na chwilę do programu prezentującego operatory przypisania. Występują w niej instrukcje: echo $a."<br>"; Kropka w powyższym zapisie oznacza oczywiście połączenie łańcuchów. Warto jednak podkreślić, że funkcja echo pozwala na pracę z wieloma argumentami oddzielonymi przecinkami. Powyższą linię można więc zapisać w sposób następujący: echo $a, "<BR>"; W programie można dostrzec jeszcze jedną nowość. Popatrz na linię: 13

$a = 20; $b = 6; Powstała ona przez połączenie dwóch linii. Często przyzwyczajamy się, że średnik powinien być ostatnim znakiem linii, podczas gdy powinien on być zawsze ostatnim znakiem instrukcji! Krótsze instrukcje warto grupować w jednej linii, oddzielając je właśnie średnikami. 1.5. Operatory warunkowe i porównania Jednym z podstawowych elementów działania algorytmu każdego programu komputerowego jest ustalanie zależności między dwiema wartościami. Operatory warunkowe znasz już zapewne z innych języków programowania. Najprostszym operatorem warunkowym jest if, przeprowadzający test na prawdziwość jakiegoś wyrażenia. Zanim przedstawię przykład, kilka słów o testowaniu wyrażeń. Warto poruszyć ten temat, gdyż PHP jest pod tym względem bardzo wdzięcznym narzędziem. Testowanie dwóch wartości oparte jest na tzw. operatorach porównania. Wymieniłem je wszystkie w tabeli: Przykład Nazwa Opis $a == $b Równy TRUE jeśli $a jest równe $b $a === Identyczny TRUE jeśli $a jest równe $b, i obydwa operandy są tego $b samego typu (tylko w PHP 4) $a!= $b Różny TRUE jeśli $a nie jest równy $b $a <> $b Różny TRUE jeśli $a nie jest równy $b $a!== Nie identyczny TRUE jeśli $a nie jest równy $b, lub nie są tego samego typu $b (tylko w PHP 4) $a < $b Mniejszy niż TRUE jeśli $a jest mniejszy od $b $a > $b Większy niż TRUE jeśli $a jest większy od $b $a <= $b Mniejszy lub równy $a >= $b Większy lub równy TRUE jeśli $a jest mniejszy lub równy $b TRUE jeśli $a jest większy lub równy $b 14

Wszystkie przedstawione w tabeli operatory są dwuargumentowe, a ich działanie jest doskonale znane. Jest jeszcze jeden operator, tym razem trzyargumentowy, jest to operator "?:", działający tak jak w C i wielu innych językach. Oto jego składnia: (expr1)? (expr2) : (expr3); Wartością zwracaną przez operator (wyrażenie) jest expr2, jeśli expr1 jest równe TRUE lub expr3, jeśli expr1 jest równe FALSE. Powróćmy jednak do operatorów warunkowych, przedstawię kilka przykładów. Na początek najprostszy if: <html> <head> <title>if</title> </head> <body> <?php # wprowadzanie wartosci zmiennych $a = 100; $b= 10; #sprawdzanie zaleznosci pomiedzy wprowadzonymi liczbami if ($a == $b) { #ta instrukcja zostanie wykonana gdy wartosci liczbowe $a i #$b sa równe print " $a i $b sa rowne\n"; elseif ($a > $b) { #ta instrukcja zostanie wykonana gdy wartosc liczbowa $a #jest wieksza od wartosci liczbowej $b print " $a jest wieksze od $b \n"; else { #ta instrukcja zostanie wykonana gdy wartość liczbowa $a #jest mniejsza od wartości liczbowej $b print " $a jest mniejsze od $b \n"; 15

?> </body> </html> Uruchom ten program, zmieniając wartości liczb przypisanych do zmiennych $a i $b. Wszystko zachowuje się zgodnie z oczekiwaniami. W tekście umieszczono komentarze ułatwiające zrozumienie kodu. Konstrukcja if-else działa podobnie jak w innych językach. W programie pojawiła się jednak nowość, popatrz na polecenie: print " $a i $b sa rowne\n"; Zamiast omawianej dotychczas instrukcji echo, zastosowałem instrukcję print, znaną wszystkim programującym w Perlu. Okazuje się jednak, że program działa prawidłowo. To wyraźny ukłon w kierunku wymiany programów pomiędzy technologiami. Najczęściej stosowaną instrukcją w programowaniu internetowym jest wysyłanie ciągów znakowych do przeglądarki, a do tego służy właśnie echo i print. Dla większości programistów różnica pomiędzy tymi instrukcjami nie istnieje, echo jest prawdopodobnie trochę szybsza. Poza jedną różnicą (w Perlu opcję warunkową zapisujemy elsif, a w PHP elseif) powyższy program można więc uruchomić zarówno w Perlu, jak i w PHP. Operatory porównania nie są w testach warunkowych obowiązkowe. Zapis ($a) jest całkowicie poprawny w PHP i oznacza sprawdzenie, czy zmienna $a istnieje, czy ma zdefiniowaną wartość i czy ta wartość nie jest łańcuchem pustym ani zerem. Ważne: warto zapamiętać, że w PHP każda forma danych skalarnych, posiadająca zdefiniowaną wartość różną od zera i łańcucha pustego, jest uważana za prawdę. Pozostałe operatory warunkowe tworzą już struktury zwane pętlami, przyjrzyjmy się im dokładnie. 1.6. Pętle while Podstawowym zadaniem pętli jest wielokrotne wykonywanie bloków instrukcji. Najpopularniejsza z instrukcji wykonujących pętle to while. Działanie while polega na wykonywaniu bloku instrukcji tak długo, jak długo wyrażenie testujące (przypomnijmy 16

to ten tekst w nawiasach okrągłych bezpośrednio za poleceniem while) zwraca prawdę. Wyrażenie testujące jest sprawdzane zawsze przed wykonaniem pierwszego polecenia bloku (przed aktywowaniem pętli). Dla lepszego zrozumienia działania pętli uruchom poniższy program dwa razy: pierwszy dokładnie taki, jak na ekranie, drugi zmieniając wartość początkową $b na 10. <html> <head> <title>przypisanie</title> </head> <body> <?php $a = 10; $b= 20; echo "<BR> wprowadzono liczby $a i $b<br>"; while ($a > $b) { echo " $a jest większe od $b <BR>"; ++$b; echo " $a jest równe $b <BR>";?> </body> </html> Przedstawiony przykład ilustruje co prawda funkcjonowanie pętli while, ma jednak dosyć poważną wadę (uwidacznia się ona przy uruchomieniu ze zmienioną wartością $b). Nie jest mianowicie odporny na wprowadzenie przez użytkownika wartości zmiennej $b większej od wartości zmiennej $a. Uruchomienie go na przykład z wartościami $a = 10 i $b = 20 generuje zastanawiający wynik: 17

Spróbuj samodzielnie usunąć omówioną wadę. Zmodyfikuj przedstawiony program tak, aby zawsze prawidłowo wyświetlał komunikat o wyniku porównania dwóch liczb. Dla wykonania tego zadania skorzystaj z omówionego na początku tego rozdziału operatora if-else. Warto także zapamiętać zasadę: między nawiasami klamrowymi { każdej instrukcji, np. pętli while, możemy umieścić dowolnie długi ciąg instrukcji języka PHP. Ta zasada obowiązuje w dowolnym miejscu programu. do-while Pętla do-while zachowuje się bardzo podobnie do pętli while, z wyjątkiem tego, że wartość wyrażenia logicznego sprawdzana jest na końcu iteracji, a nie na początku. Wynikającą z tego główną różnicą jest to, że pierwsza iteracja w pętli do-while na pewno zostanie wykonana (gdyż wyrażenie logiczne będzie sprawdzone dopiero na koniec iteracji). Natomiast w pętli while, gdzie wyrażenie logiczne jest sprawdzane na początku iteracji, może dojść do sytuacji, że pętla w ogóle nie zostanie wykonana, jeśli to wyrażenie będzie miało wartość FALSE od początku. Pętla do-while ma tylko jeden rodzaj składni: $i = 0; do { print $i; while ($i>0); Powyższa pętla zostanie wykonana tylko raz, gdyż po pierwszej iteracji wartość wyrażenia logicznego wynosić będzie FALSE ($i nie jest większe od 0) i pętla zostanie zakończona. 18

for Pętla for jest najczęściej używana w przypadku, gdy musimy wykonać fragment kodu określoną liczbę razy. Daje ona możliwość określenia liczby iteracji pętli. Jej partia warunkowa jest bardziej złożona od pętli while i składa się z trzech części. for (ustawienie licznika pętli; sprawdzenie licznika pętli; zwiększenie lub zmniejszenie licznika pętli) { wykonaj blok instrukcji W pętli for wprowadzono koncepcję licznika pętli. Jest to zmienna używana do zliczania liczby przebiegów pętli (liczba iteracji), wykorzystywana do przerwania wykonywania pętli, gdy jej wartość przekroczy założoną liczbę. Trzecia część wyrażenia warunkowego zapewnia zmianę wartości licznika pętli przy każdym przebiegu pętli. Te trzy części pozwalają na tworzenie dosyć skomplikowanych warunków i pętli. Żadna z części warunku nie jest obowiązkowa, co zilustrują poniższe przykłady (celem oszczędności miejsca, pominięta została część kodu obejmująca znaczniki HTML). Przykład 1 pętla for z trzema argumentami for ($i = 1; $i <= 10; $i++) { echo $i; Przykład 2 pętla for bez warunku sprawdzającego for ($i = 1;;$i++) { if ($i > 10) { break; print $i; W przykładzie tym pojawiła się nowa instrukcja: break. Po jej napotkaniu program wychodzi z bieżącej pętli. Należało ją zastosować, gdyż pominięto warunek sprawdzający, a pętla bez tego warunku jest przecież pętlą nieskończoną. Oprócz instrukcji break, w języku PHP istnieje bardzo podobna w działaniu instrukcja continue. Po napotkaniu tej instrukcji program przechodzi wprost do zamykającej klamry i pętla jest kontynuowana. Instrukcja ta nie powoduje więc całkowitego opuszczenia pętli, a jedynie przejście do kolejnej iteracji. 19

Przykład 3 pętla, w której pominięto wszystkie argumenty $i = 1; for (;;) { if ($i > 10) { break; print $i; $i++; Zwróć uwagę, że przy pomijaniu któregokolwiek z argumentów pętli for należy zachować odpowiednią liczbę średników oddzielających! Przykład 4 pętla, w której instrukcja wykonująca znajduje się w argumencie trzecim for ($i = 1; $i <= 10; print $i, $i++); Jak widać, każdy z argumentów może zawierać kilka instrukcji, muszą one być pooddzielane przecinkami. Można teraz podać bardziej ogólną definicję składni tej pętli. Oto ona: for (wyrażenie1; wyrażenie2; wyrażenie3) {instrukcje Wyrażenie1 jest wykonywane tylko raz, na początku pętli. Po czym na początku każdej nowej iteracji obliczana jest wartość logiczna wyrażenia wyrażenie2. Jeśli wynikiem obliczenia jest TRUE, to pętla kontynuuje i następuje wykonanie instrukcji umieszczonych w pętli. Jeśli jednak wyrażenie ma wartość FALSE, to wykonanie pętli zostaje przerwane. Na końcu każdej iteracji zostaje wykonane wyrażenie3. 1.7. Dodatkowe informacje o tablicach tablice asocjacyjne Zanim omówię kolejne struktury pętli, warto poświęcić trochę czasu na zapoznanie się z dodatkowymi możliwościami tablic. Poznasz teraz specjalny typ tablic, tzw. tablice asocjacyjne. Zostały one zaprojektowane dla łatwiejszego przetwarzania danych 20

tekstowych. Ich cechą charakterystyczną jest zastąpienie tradycyjnych indeksów liczbowych łańcuchami znakowymi. Dzięki tablicom asocjacyjnym można wykorzystywać w programie listy zawierające pary wartości "klucz" "wartość". Mówiąc inaczej: tablica asocjacyjna jest niczym innym, jak specyficznym rodzajem tablicy, w którym zamiast indeksu, który określał poszczególne elementy, użyty jest identyfikator tekstowy, zwany kluczem. Podstawowa konstrukcja definiująca tablicę asocjacyjną wygląda następująco: array( klucz => wartość, klucz => wartość,...) Przykładowa definicja tablicy może wyglądać następująco: $asocjacja = array( 1 => 'jeden', 2 => 'dwa', 3 => 'trzy' ); W języku PERL nazwy skalarów rozpoczynają się od znaku $, nazwy tablic od @, natomiast tablic asocjacyjnych od %. W PHP nie ma takiego rozróżnienia, wszystkie nazwy rozpoczynają się od znaku "$", a rozróżnienie następuje po typie indeksu (czy jest to liczba, czy ciąg znaków). Co ciekawe, reprezentacja tablic w PHP pozwala na dowolne mieszanie typów indeksów. Zilustruję to przykładem: $a = array( 'kolor' => 'żółty', 'stolica' => 'warszawa', 'uczelnia' => 'uniwersytet', 'nazwa' => 'jabłko', 4 // kluczem będzie 0 ); // znaczy dokładnie to samo, co to: $a['kolor'] = 'żółty'; $a['stolica'] = 'warszawa'; $a['uczelnia'] = 'uniwersytet'; $a['nazwa'] = 'jabłko'; $a[] = 4; // kluczem będzie 0 Można też zwykłe tablice zapisywać w konwencji tablic asocjacyjnych. $b[] = 'a'; $b[] = 'b'; $b[] = 'c'; 21

// znaczy to samo co: array( 0 => 'a', 1 => 'b', 2 => 'c' ), // albo prościej: array('a', 'b', 'c') 1.8. Tablice wielowymiarowe Na początku omawiania tablic przedstawiałem ich jednowymiarowość jako często podkreślaną wadę języka. Zobaczmy więc, jak sobie radzić z implementacją tablic wielowymiarowych. Elementy tablicy mogą być danymi dowolnego typu. Oprócz liczb i łańcuchów w elementach tablicy można umieszczać inne tablice. Tablice zawarte w innych tablicach są też zwane tablicami wielowymiarowymi. Wyobraźmy sobie tabelę 10 na 10. Tworzy ona 100 pól, z których każde może mieć swoją wartość. Jednym ze sposobów reprezentacji takiej struktury w kodzie jest tablica dwuwymiarowa: dziesięcioelementowa tablica, której każdy element jest dziesięcioelementową tablicą innymi słowy dziesięć kolumn i dziesięć wierszy. Aby wskazać pojedynczy element, należy w nawiasach kwadratowych podać pierwszy wymiar (wiersz), a następnie w kolejnych nawiasach kwadratowych podać drugi wymiar (kolumnę). Wskazanie 3 wiersza i 7 kolumny można zapisać jako $jakastablica[3][7]. Oto przykład obrazujący fakt, że tablice wielowymiarowe są po prostu tablicami tablic. $miasta = array("wielkopolska"=>array( "Poznań", "Piła", "Jarocin" ), "Śląsk"=>array( "Katowice", "Chorzów" ) ); print($miasta["wielkopolska"][1]); Jak widać nie jest to jednak tak skomplikowane, jak pierwotnie wyglądało. 22

foreach Dokładna analiza ostatniej linii przedstawionego przed chwilą programu pozwala zauważyć, że nie znamy do tej pory mechanizmu, pozwalającego w łatwy sposób wyświetlić wszystkie elementy tablicy. Można to oczywiście wykonać za pomocą pętli for, ale w przypadku tablic o nieciągłych indeksach uzyskalibyśmy bardzo dużo wartości pustych. Z tego właśnie powodu twórcy języka Perl zaprojektowali specjalny operator pętli, wykonującej się automatycznie dla wszystkich elementów tablicy podanej jako argument. Nosi on nazwę foreach. Istnieją dwie składnie tej konstrukcji, przy czym druga jest mniej ważnym, lecz użytecznym rozszerzeniem pierwszej: foreach(wyrażenie_tablicowe as $wartość) wyrażenie foreach(wyrażenie_tablicowe as $klucz => $wartość) wyrażenie Pierwsza odmiana iteruje wewnątrz tablicy podanej w wyrażenie_tablicowe. Przy każdej iteracji, wartość aktualnego elementu tablicy jest przypisywana do zmiennej $wartość, a wewnętrzny wskaźnik tablicy jest przesuwany o jeden (więc w następnej iteracji przypisany zostanie kolejny element tablicy). Druga odmiana działa tak samo jak pierwsza, przy czym klucz aktualnego elementu tablicy zostanie przypisany do zmiennej $klucz w każdej iteracji. Pozwala to na łatwą obsługę tablic asocjacyjnych. Możemy teraz zmodyfikować nasz program dotyczący tablic wielowymiarowych tak, aby wyświetlał wszystkie wartości tablicy. Oto zmodyfikowana wersja: <html> <head> <title>foreach</title> </head> <body> <?php $miasta = array("wielkopolska"=>array( "Poznań", "Piła", "Jarocin" ), "Slask"=>array( "Katowice", "Chorzów" 23

) ); foreach ($miasta as $klucz=>$region){ foreach ($region as $miasto){ echo $klucz,"---",$miasto,"<br>";?> </body> </html> Zastosowano w nim dwie pętle foreach. Pierwsza wykonuje się dla wszystkich wartości tablicy $miasta. Pobiera więc ona wartości Wielkopolska i Slask. Druga, wewnętrzna pętla, operuje na tablicach wewnętrznych, zawierających nazwy miast. Jeżeli wszystko przepisałeś prawidłowo, w oknie przeglądarki powinien wyświetlić się następujący obraz: I jeszcze dwa przykłady ilustrujące działanie pętli foreach: Przykład 1 tablica liczbowa $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Aktualna wartość \$a: $v.\n"; 24

Przykład 2 tablica asocjacyjna $a = array ( "jeden" => 1, "dwa" => 2, "trzy" => 3, "siedemnaście" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; switch Alternatywą dla omówionej wcześniej struktury if-elseif-else jest instrukcja switch, która działa na zasadzie porównywania pojedynczego wyrażenia do szeregu możliwych jego wartości. Aby wyjaśnić działanie tej instrukcji, zaprezentuję dwa przykłady. Pierwszy z nich to klasyczna konstrukcja if-else, drugi to równoważna instrukcja switch. Przykład 1 if ($i == 0) { print "i jest równe 0"; elseif ($i == 1) { print "i jest równe 1"; elseif ($i == 2) { print "i jest równe 2"; Przykład 2 switch ($i) { case 0: print "i jest równe 0"; break; case 1: print "i jest równe 1"; break; case 2: 25

print "i jest równe 2"; break; Instrukcja switch jest wykonywana linia po linii. Na początku żaden fragment kodu nie jest wykonywany. Dopiero kiedy zostaje odnalezione wyrażenie case, którego wartość odpowiada wyrażeniu przy instrukcji switch, PHP rozpoczyna wykonywanie kodu od miejsca, gdzie znajduje się ta instrukcja case. PHP wykonuje instrukcje aż do momentu, kiedy blok switch się skończy lub do momentu znalezienia instrukcji break. Ważne: jeśli nie napiszesz instrukcji break na końcu instrukcji w danym wyrażeniu case, to PHP będzie wykonywać dalej instrukcje z następnego wyrażenia case. Po etykiecie case mogą nie występować żadne instrukcje, co oznacza po prostu, że sterowanie zostaje przekazane do następnej etykiety case. Na przykład: switch ($i) { case 0: case 1: case 2: print "i jest mniejsze od 3, ale nie jest ujemne"; break; case 3: print "i jest równe 3"; Switch posiada też specjalną etykietę, tzw. etykietę warunku domyślnego default. Etykieta ta dotyczy sytuacji, w której wyrażenie nie pasowało do wartości przy innych etykietach typu case. W instrukcji switch ta etykieta powinna być ostatnia z listy. Na przykład: switch ($i) { case 0: print "i jest równe 0"; break; case 1: 26

print "i jest równe 1"; break; case 2: print "i jest równe 2"; break; default: print "i jest różne od 0, 1 i 2"; 27