PHP/Odpowiedzi/Podstawy języka
Odpowiedzi
[edytuj]Odpowiedzi do ćwiczeń z rozdziału Podstawy języka podręcznika PHP.
Zasada działania PHP
[edytuj]PHP jest językiem skryptowym. Co to oznacza?
Program w języku skryptowym wykonywany jest w locie przez dodatkową aplikację zwaną interpreterem bezpośrednio z kodu źródłowego. Przeciwieństwem są języki kompilowane, które są tłumaczone na kod maszynowy komputera (np. C, C++) oraz języki wykonywane na maszynie wirtualnej (np. Java), gdzie programy tłumaczone są do postaci kodu bajtowego rozumianego przez taką maszynę.
W rzeczywistości obecnie PHP ma znacznie bliżej do Javy, niż do typowych języków skryptowych. Interpreter najpierw tłumaczy w locie wykonywany skrypt do kodu bajtowego, a później wykonuje ten kod na wbudowanej maszynie wirtualnej. W przeciwieństwie do Javy, kod bajtowy generowany jest domyślnie od nowa przy każdym uruchomieniu skryptu, dlatego programista ma wrażenie, że interpreter wykonuje bezpośrednio kod PHP. |
Wskaż czynności, które można wykonać przy pomocy PHP. Jeżeli czegoś nie da się zrobić w PHP, jakiej technologii użyjesz?
PHP pracuje po stronie serwera i w momencie, gdy przeglądarka zaczyna wyświetlać stronę, nasz skrypt już dawno skończył pracę. Dlatego poprawnymi odpowiedziami były wszystkie czynności, które wykonywały się na serwerze:
- Licznik odwiedzin - PHP.
- Otwarcie pliku na dysku internauty - ze względów bezpieczeństwa operacja niedozwolona. Mogą ją tylko wykonywać kontrolki ActiveX, których i tak nie obsługuje duża liczba przeglądarek.
- Rozwijane menu - JavaScript. Rozwijane menu dotyczy przecież interakcji przeglądarki z użytkownikiem na jego własnym komputerze.
- Otwarcie pliku na serwerze - PHP.
- Rejestrowanie informacji o osobach przychodzących - PHP. Po pobraniu tych danych musimy je przecież gdzieś trwale zapisać.
- System newsów - PHP.
- Aktualizacja fragmentu załadowanej strony WWW - AJAX. Jak wspomnieliśmy, PHP już dawno zakończył pracę, gdy strona zaczyna być wyświetlana w przeglądarce, dlatego tym bardziej nie będzie on w stanie przeładować fragmentu już wygenerowanej strony. Potrzebna jest tutaj współpraca ze strony JavaScriptu i technologii AJAX.
- Zareagowanie na kliknięcie myszką - jak wyżej, jest to akcja przeglądarki, zatem pracujący na serwerze PHP nie jest w stanie jej przechwycić.
- Pobranie adresu MAC karty sieciowej internauty - praktycznie niewykonalne, gdyż przeglądarki nie udostępniają takich danych, a bez tego skrypt PHP jest bezradny.
- Wyszukiwarka treści - PHP. Treść zapisana jest na serwerze, zatem to właśnie skrypt w tym języku jest w stanie ją przejrzeć.
Co powinien generować skrypt PHP uruchamiany na serwerze WWW?
Pytanie było dość podchwytliwe. Najbardziej oczywista odpowiedź "kod HTML" nie jest kompletna. Działanie stron internetowych opiera się na protokole HTTP. Przeglądarka wysyła do serwera żądania pobrania określonej treści, a ten generuje odpowiedź. Uruchomiony przez serwer skrypt PHP ma za zadanie wygenerować właśnie odpowiedź HTTP, na którą składają się:
- Nagłówki informacyjne
- Treść dokumentu
Kod HTML strony jest tylko jednym z możliwych rodzajów treści. Dokładnie w ten sam sposób pobierane są obrazki oraz pliki, dlatego nic nie stoi na przeszkodzie, aby skrypt PHP generował dynamicznie np. grafikę.
Podstawy języka
[edytuj]Do czego służy komenda echo?
Komenda echo
wysyła podany tekst na wyjście skryptu. Jeśli skrypt uruchamiamy w konsoli systemowej, wpisany tekst wyświetli się na konsoli. Gdy współpracuje z serwerem WWW, wpisany tekst zostanie wysłany do przeglądarki jako część odpowiedzi HTTP.
Dlaczego tekst, który chcemy wyświetlić przy pomocy echo nie musi być otoczony nawiasami, a przy printf musi?
printf()
to funkcja identyczna z tymi, jakie możemy sami stworzyć. echo
to instrukcja języka i dlatego otaczanie jej argumentów nawiasami nie jest konieczne.
Objaśnij różnicę w działaniu cudzysłowów i apostrof.
W przypadku tekstu zapisanego w cudzysłowach PHP rozpoznaje dużo większą liczbę kodów formatujących umożliwiających np. bezpośrednie wstawianie zmiennych. Jeśli napiszemy "tekst $zmienna tekst"
, interpreter spróbuje w miejscu $zmienna wstawić wartość zmiennej. Zastępując cudzysłowy apostrofami, zapis $zmienna przestaje być specjalnie traktowany i po prostu wyświetla się tak, jak go wpiszemy.
Do czego służą zmienne? Jakimi atrybutami można je opisać?
Zmienne to coś w rodzaju pojemników, w których możemy przechowywać wartości. Zmienną opisują trzy atrybuty:
- Nazwa - dzięki jej znajomości możemy dostać się do zawartości zmiennej.
- Wartość - przechowywana wartość.
- Zakres widoczności - określa, w jakich miejscach kodu zmienna jest dostępna. Przykładowo, zmienne utworzone we wnętrzu funkcji nie są widoczne poza nią, a zmienne globalne nie są domyślnie widoczne wewnątrz wywoływanych funkcji.
Wskaż niepoprawne nazwy zmiennych.
Jedyną niepoprawną nazwą było $15newsow
- nazwa zmiennej nie może zaczynać się od cyfry.
Opisz na przykładzie, dlaczego powinno się inicjować zmienne przed pierwszym użyciem.
Jest tutaj kilka poprawnych odpowiedzi. Jedną z nich jest:
Jeśli inicjujemy wszystkie zmienne w naszym skrypcie, możemy swobodnie korzystać z podwyższonego raportowania błędów, dzięki czemu interpreter natychmiast wyłapie nam ewentualne literówki, które w przeciwnym razie mogłyby się ujawnić nawet wiele miesięcy później. Niezainicjowana zmienna ma wartość null.
Porównanie kodów
Zmienne tymczasowe zupełnie nie są potrzebne w pierwszym przykładzie. Nie wnoszą one nic do działania skryptu, jedynie go komplikując. Wszystko to można zapisać w jednej linijce:
<?php
zapisz(nl2br(htmlspecialchars($_POST['tresc']));
Ponadto możemy operować bezpośrednio na zawartości zmiennej $_POST
.
W drugim przypadku do zmiennej tymczasowej zapisujemy wynik działania funkcji wykonującej hipotetyczne skomplikowane obliczenia. Zmienna tymczasowa służy tutaj do tego, aby nie wykonywać kilkakrotnie tych samych obliczeń, jako że nasz wynik wykorzystujemy później w różnych miejscach. W dodatku, jeśli funkcja ma jakieś efekty uboczne (np. modyfikuje jakieś dane), jej ponowne wykonanie może zafałszować nasz wynik, uszkodzić nasze dane lub zrobić obie te rzeczy naraz.
Pętle i instrukcje warunkowe
[edytuj]Jaka musi być wartość wyrażenia w pętli while, aby jej treść wykonała się ponownie?
Odpowiedź: true
Jaka musi być wartość wyrażenia w pętli do... while, aby jej treść wykonała się ponownie?
Odpowiedź: true
Co najmniej ile razy wykona się kod w pętli do... while, a ile w while?
W do... while
warunek sprawdzany jest po wykonaniu iteracji, dlatego treść tej pętli zawsze wykona się co najmniej raz. W while
warunek sprawdzany jest najpierw, dlatego treść tej pętli może się w ogóle nie wykonać.
W jaki sposób wykonać określony kod, gdy żądany przez nas warunek nie jest spełniony?
Wystarczy go zanegować lub podać jego odwrotność, np.
<?php
if(!($a == $b))
{
// ten kod wykona się, gdy warunek nie jest spełniony
}
Zamień podane wyrażenia logiczne na ich odwrotności
Jest to ćwiczenie na znajomość praw logicznych i tautologii, czyli typowa matematyka:
$a == $b
daje$a != $b
($a > 8) && ($a < 20)
daje($a <= 8) || ($a >= 20)
- korzystamy z pierwszego prawa De Morgana (negacja koniunkcji to alternatywa negacji).($a == 7) || ($b < 20)
daje($a != 7) && ($b >= 20)
- z drugiego prawa De Morgana (negacja alternatywy to koniunkcja negacji).
Opisz słownie, co opisują wyrażenia oraz ich odwrotności z poprzedniego ćwiczenia.
Pierwsze z wyrażeń po prostu sprawdza czy dwie zmienne mają taką samą (lub różne w zaprzeczonej wersji) wartości.
Drugie wyrażenie mówi, że wartość zmiennej $a
musi zawierać się w przedziale otwartym od 8 do 20, a w wersji zaprzeczonej - poza tym przedziałem.
Trzecie wyrażenie mówi, że $a
musi mieć wartość równą 7 lub $b
być mniejsze od 20. W wersji zaprzeczonej wyrażenie jest spełnione tylko wtedy, gdy $a
jest różne od 7 i $b
wynosi przynajmniej 20.
Funkcje
[edytuj]Błąd polegał na użyciu echo
zamiast return
w treści funkcji. Przez to PHP zamiast zwracać sformatowaną wartość do dalszej obróbki, od razu wysyłał ją do przeglądarki. Intencją autora natomiast było osadzenie sformatowanej treści w kolejnym znaczniku.