PHP: Różnice pomiędzy wersjami

Z Nonsensopedii, polskiej encyklopedii humoru
M (tre)
M (Wycofano ostatnie edycje autorstwa Typowekonto; przywrócono ostatnią wersję autorstwa Ostrzyciel.)
Znacznik: rewert
 
(Nie pokazano 42 wersji utworzonych przez 28 użytkowników)
Linia 1: Linia 1:
{{tre}}

{{Programowanie}}
{{Programowanie}}
'''PHP''' (Pier{{cenzura3}}lę (c)H{{cenzura3}}owe Programowanie) – język programowania oparty na [[C_(język_programowania)|C]]. Używany na stronach internetowych, do gromadzenia danych osobowych użytkowników, w celu późniejszego odsprzedania ich korporacjom reklamowym. PHP pozwala plątać zaplątany kod źródłowy, co jest ściśle powiązane z podparciem na C. Zazwyczaj PHP używa się w połączeniu z bazą danych [[MySQL|MySQL]], w celu ułatwienia katalogowania zbieranych danych osobowych. Ponadto jest jedynym językiem w którym udało wykonać się nieskończoną liczbę liczników odwiedzin strony internetowej, przez programistów, którzy wcale nie potrafią programować. Rozpoznawalną cechą tych programów jest niezrozumiała nazwa i wysoki numer wersji zaczynający się zazwyczaj od cyfry powyżej 7.


'''PHP''' – język wywołujący u [[Programista|programistów]] wychowanych na językach z typowaniem statycznym popłoch, [[Panika|panikę]], a w skrajnych przypadkach nawet zbiorową [[Histeria|histerię]].


== Programowanie w PHP ==
[[pt:PHP]]
[[Plik:Młotek PHP.jpg|thumb|350px|Młotek zrobiony bazując na doświadczeniach z PHP]]
Programowanie w PHP jest bardzo proste ze względu na olbrzymią liczbę funkcji. Dla przykładu, jeśli chcesz napisać „[[Nonsensopedia]] jest wspaniała!” możesz to zrobić na wiele różnych sposobów. Funkcje są często bardzo podobne, na przykład <code>echo</code> jest tym samym co <code>print</code>, tyle że w <code>echo</code> oddzielasz wyrazy przecinkami, a w <code>print</code> kropkami.

<syntaxhighlight lang="php">
Nonsensopedia jest wspaniała!<br> <? // najprostsza wersja echo() – poza kodem ?>

<?
error_reporting(-9223372036854743049);
echo 'Nonsensopedia ',jest,chr(32),'wspaniała!<br>' ;
print 'Nonsensopedia '.jest.chr(32).'wspaniała!<br>' ; /* używa się tu kropek, nie przecinków */
printf('Nonsensopedia '.jest.chr(32).'wspaniała!<br>'); // funkcja przeniesiona z C, wymaga nawiasów
die ('Nonsensopedia '.jest.chr(32).'wspaniała!<br>'); # odpowiednik print, ale z nawiasami
?>
</syntaxhighlight>

== Zwracanie błędów ==
Funkcja <code>error_reporting()</code> ustawia poziom informacji o błędach. Jak łatwo się domyślić, poziom -9223372036854743049 znaczy że PHP powinien informować o wszystkich błędach, z wyjątkiem tych które mogłyby zmniejszyć kompatybilność z C (jak na przykład używanie niezaicjalizowanych zmiennych). Aby PHP informował o wszystkich błędach, nawet tych wprowadzonych w przyszłości trzeba użyć 9223372036854775807.

PHP jest znany z pomocnych komunikatów błędów, które wymagają bycia poliglotą. Nie dość że trzeba znać [[Język angielski|angielski]], ale także inne języki takie jak [[Język niemiecki|niemiecki]], [[Język francuski|francuski]], [[Język japoński|japoński]] czy nawet [[Język hebrajski|hebrajski]].

=== Przykład 1 ===
Przykład kodu poniżej zawiera błąd o którym PHP informuje.

<syntaxhighlight lang="php">
<?
function sł33t_::_fónkj1a (^^ )--
{
echo 'Nonsensopedia '.jest.chr(32).'wspaniała!<br>';
}
?>
</syntaxhighlight>
'''Parse error:''' syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting '(' in '''[[:/dev/null]]''' on line '''2'''

=== Przykład 2 ===
Innym, bardziej zrozumiałym błędem jest występujący w następującej funkcji.

<syntaxhighlight lang="php">
<?
function pomnóż_przez_dwa(integer $i) {
return $i * 2;
}
echo '2 * 2 = ', pomnóż_przez_dwa(2);
?>
</syntaxhighlight>
2 * 2 = '''PHP Catchable fatal error:''' Argument 1 passed to pomnóż_przez_dwa() must be an instance of integer, integer given, called in /dev/null on line 5 and defined in '''/dev/null''' on line '''2'''

== Intuicyjność ==
PHP jest znany ze swojej nieziemskiej intuicyjności, dzięki czemu programista przesiadający się z innego języka może wręcz natychmiast zacząć tworzyć niezwykle kreatywne i niespotykane nigdzie indziej bugi i problemy. Na szczególną uwagę zasługuje mechanizm ''żonglerki błędami'' (ang. type juggling), który pozwala programiście w prosty i wygodny sposób dodać do swojej aplikacji kilka luk bezpieczeństwa. Przykładowy kod wykorzystujący wspomnianą funkcję:

<syntaxhighlight lang="php">
<?php

$tablica = array();
$tablica[3.123456] = 5;
$tablica[3.777777] = 10;

if ($tablica[3.123456] == 10) {
echo('WSZYSTKO ');
}
if ("20000000000000001" == "20000000000000000") {
echo('OŁRAJT!');
}

?>
</syntaxhighlight>

'''Wynik:''' WSZYSTKO OŁRAJT!

Mechanizm ten jest na tyle transparentny i instynktowny, że większość zagorzałych programistów PHP nawet nie wie o jego istnieniu, a mimo to z sukcesem bije rekordy pod względem ilości dodanych <del>linijek kodu</del> błędów.

== Przenośność ==
Niektóre języki programowania, na przykład [[C Sharp|C#]] są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami [[Windows Vista|Visty]] jest wiele warta). PHP idzie o krok dalej. Kod zachowuje się inaczej w zależności od konfiguracji PHP, więc nawet między systemami możesz się spodziewać trochę innego zachowania kodu. Na przykład, opcja <code>magic_quotes_gpc</code> dostawia slashe do danych użytkownika, ponieważ według autorów PHP im więcej slashy tym lepiej. Oczywiście można je usunąć funkcją <code>stripslashes()</code>, ale wtedy twój kod będzie usuwać slashe celowo wstawione w [[komputer osobisty|komputerach]] które nie mają tej opcji włączonej.

Ale to nie wszystko – można wyłączyć każdą funkcję bez problemu w konfiguracji. Nie lubisz <code>printf</code> – nie ma sprawy, zmień jedną linijkę w konfiguracji. To co że zewnętrzny kod używający jej nie będzie działać. Oczywiście jeśli tego nie lubisz możesz użyć znaku <code>[[grawis|`]]</code> do uruchamiania zewnętrznych programów (czytaj: symulatora <code>printf</code>), ale jego też można zablokować.

== Zobacz też ==
* [[HTML]]
* [[JavaScript]]
* [[Perl]]
* [[Python]]
* [[PL/SQL]]


[[en:PHP]]
[[en:PHP]]
[[fr:PHP]]
[[ja:PHP]]
[[ru:PHP]]
[[ko:PHP]]
[[pt:PHP]]
{{stopka}}
[[Kategoria:Języki programowania]]
[[Kategoria:Języki programowania]]

Aktualna wersja na dzień 17:46, 19 wrz 2023

Ten artykuł jest częścią cyklu naukowego języki komputerowe.

Języki programowania:


Inne języki komputerowe:


edytuj ten szablon

PHP – język wywołujący u programistów wychowanych na językach z typowaniem statycznym popłoch, panikę, a w skrajnych przypadkach nawet zbiorową histerię.

Programowanie w PHP[edytuj • edytuj kod]

Młotek zrobiony bazując na doświadczeniach z PHP

Programowanie w PHP jest bardzo proste ze względu na olbrzymią liczbę funkcji. Dla przykładu, jeśli chcesz napisać „Nonsensopedia jest wspaniała!” możesz to zrobić na wiele różnych sposobów. Funkcje są często bardzo podobne, na przykład echo jest tym samym co print, tyle że w echo oddzielasz wyrazy przecinkami, a w print kropkami.

Nonsensopedia jest wspaniała!<br> <? // najprostsza wersja echo() – poza kodem ?>

<?
  error_reporting(-9223372036854743049);
  echo   'Nonsensopedia ',jest,chr(32),'wspaniała!<br>' ;
  print  'Nonsensopedia '.jest.chr(32).'wspaniała!<br>' ; /* używa się tu kropek, nie przecinków */
  printf('Nonsensopedia '.jest.chr(32).'wspaniała!<br>'); // funkcja przeniesiona z C, wymaga nawiasów
  die   ('Nonsensopedia '.jest.chr(32).'wspaniała!<br>'); #  odpowiednik print, ale z nawiasami
?>

Zwracanie błędów[edytuj • edytuj kod]

Funkcja error_reporting() ustawia poziom informacji o błędach. Jak łatwo się domyślić, poziom -9223372036854743049 znaczy że PHP powinien informować o wszystkich błędach, z wyjątkiem tych które mogłyby zmniejszyć kompatybilność z C (jak na przykład używanie niezaicjalizowanych zmiennych). Aby PHP informował o wszystkich błędach, nawet tych wprowadzonych w przyszłości trzeba użyć 9223372036854775807.

PHP jest znany z pomocnych komunikatów błędów, które wymagają bycia poliglotą. Nie dość że trzeba znać angielski, ale także inne języki takie jak niemiecki, francuski, japoński czy nawet hebrajski.

Przykład 1[edytuj • edytuj kod]

Przykład kodu poniżej zawiera błąd o którym PHP informuje.

<?
  function sł33t_::_fónkj1a (^^ )--
  {
    echo 'Nonsensopedia '.jest.chr(32).'wspaniała!<br>';
  }
?>

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting '(' in /dev/null on line 2

Przykład 2[edytuj • edytuj kod]

Innym, bardziej zrozumiałym błędem jest występujący w następującej funkcji.

<?
function pomnóż_przez_dwa(integer $i) {
    return $i * 2;
}
echo '2 * 2 = ', pomnóż_przez_dwa(2);
?>

2 * 2 = PHP Catchable fatal error: Argument 1 passed to pomnóż_przez_dwa() must be an instance of integer, integer given, called in /dev/null on line 5 and defined in /dev/null on line 2

Intuicyjność[edytuj • edytuj kod]

PHP jest znany ze swojej nieziemskiej intuicyjności, dzięki czemu programista przesiadający się z innego języka może wręcz natychmiast zacząć tworzyć niezwykle kreatywne i niespotykane nigdzie indziej bugi i problemy. Na szczególną uwagę zasługuje mechanizm żonglerki błędami (ang. type juggling), który pozwala programiście w prosty i wygodny sposób dodać do swojej aplikacji kilka luk bezpieczeństwa. Przykładowy kod wykorzystujący wspomnianą funkcję:

<?php

$tablica = array();
$tablica[3.123456] = 5;
$tablica[3.777777] = 10;

if ($tablica[3.123456] == 10) {
        echo('WSZYSTKO ');
}
 
if ("20000000000000001" == "20000000000000000") {
        echo('OŁRAJT!');
}

?>

Wynik: WSZYSTKO OŁRAJT!

Mechanizm ten jest na tyle transparentny i instynktowny, że większość zagorzałych programistów PHP nawet nie wie o jego istnieniu, a mimo to z sukcesem bije rekordy pod względem ilości dodanych linijek kodu błędów.

Przenośność[edytuj • edytuj kod]

Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). PHP idzie o krok dalej. Kod zachowuje się inaczej w zależności od konfiguracji PHP, więc nawet między systemami możesz się spodziewać trochę innego zachowania kodu. Na przykład, opcja magic_quotes_gpc dostawia slashe do danych użytkownika, ponieważ według autorów PHP im więcej slashy tym lepiej. Oczywiście można je usunąć funkcją stripslashes(), ale wtedy twój kod będzie usuwać slashe celowo wstawione w komputerach które nie mają tej opcji włączonej.

Ale to nie wszystko – można wyłączyć każdą funkcję bez problemu w konfiguracji. Nie lubisz printf – nie ma sprawy, zmień jedną linijkę w konfiguracji. To co że zewnętrzny kod używający jej nie będzie działać. Oczywiście jeśli tego nie lubisz możesz użyć znaku ` do uruchamiania zewnętrznych programów (czytaj: symulatora printf), ale jego też można zablokować.

Zobacz też[edytuj • edytuj kod]