Co prawda PHP nie pozwala zaszaleć jeśli chodzi o dynamiczny kod, ale jedna w jakimś stopniu jest to możliwe. Postaram się opowiedzieć o jednym aspekcie dynamiki kodu w PHP, mianowicie o wykorzystaniu zmiennych jako nazw.
Co prawda PHP nie pozwala zaszaleć jeśli chodzi o dynamiczny kod, ale jedna w jakimś stopniu jest to możliwe. Postaram się opowiedzieć o jednym aspekcie dynamiki kodu w PHP, mianowicie o wykorzystaniu zmiennych.
Zmienne w PHP – podobnie jak i w innych językach – to podstawa. W PHP można je wykorzystać np. do nazywania innych zmiennych, do wywoływania funkcji i wywoływania obiektów itp. Ja jednak skupię się na tych trzech zagadnieniach.
Nazywanie zmiennych zmiennymi:
W trakcie pisania programu, może zajść potrzeba zainicjowania zmiennej, której nazwa będzie zależna od innych czynników podczas wykonywania programu. Chcemy na przykład przy pomocy jednej zmiennej przebrnąć przez dwa poziomy instrukcji warunkowych, np. piszemy skrypt który ma wyświetlić powitanie, w zależności od płci i wieku. Jako nazwę zmiennej przyjmiemy płeć, a wartość wiek. W zależności od wieku wyświetlimy komunikat witam, lub dzień dobry, a w zależności od płci pana lub panią.
| <?php $plec = 'mezczyzna’; $$plec = 40; |
Do zmiennej płeć przypisaliśmy wartość 'mezczyzna’, zauważ podwójny znak dolara, oznacza ze nowa zmienna będzie nazywała się tak jak wartość zmiennej $plec, w tym wypadku 'mezczyzna’. Następnie do nowej zmiennej $mezczyzna przypisujemy wartość 40 jako wiek. Teraz jeżeli zależy nam na pamięci możemy usunąć zmienną $plec z pamięci:
| unset($plec); |
dalej mamy dwie instrukcje warunkowe, które sprawdzają płeć poprzez sprawdzenie czy dana zmienna istnieje:
| if($mezczyzna) { if ($mezczyzna < 30) { echo „witam Pana”; } else { echo „dzień dobry Panu”; } if($kobieta) { if ($kobieta < 30) { echo „Witam Panią”; } else { echo „dzień dobry Pani”; } ?> |
Nie jest to może najlepszy przykład, ale oddaje sens sytuacji.
Można oczywiście nazwać zmienne dwoma zmiennymi, trzeba do tego użyć konkatenacji i nawiasów sześciennych, chcemy na przykład nazwać zmienną zmiennymi $imie i $nazwisko, zrobimy to tak:
| ${$imie . $nazwisko} = 'jakiś człowiek’; |
w ten sposób możemy nazywać zmienne jak nam się podoba, może się przydać w wypadku, gdy wiemy jakie mogą wystąpić zmienne, wiemy jak mogą się nazywać, ale nie wiemy ile ich będzie potrzebnych, wtedy możemy je inicjować poprzez pętle na podstawie wprowadzonych danych. Mamy na przykład dane z formularza w tablicy, teraz chcemy w zależności od tych danych stworzyć zmienne i przypisać im potrzebne wartości, możemy to zrobić w taki sposób:
| <?php foreach( $dane AS $index => $wartosc ) { ${$wartosc. $tablica[$wartosc]} = $tablica[$wartosc]; } ?> |
w ten oto sposób budujemy zmienne na podstawie wprowadzonych wartości i wcześniej określonych z tablicy. Nie jest to jedyne wyjście z takiej sytuacji, ale na nasze potrzeby jest w sam raz, w końcu o to chodziło. Jeszcze jedna sprawa na koniec, jeżeli używasz zmiennej do nazwania zmiennej, to nawet jeżeli jest to jedna zmienna, użyj nawiasów sześciennych, po to aby jeżeli ktoś kto będzie kiedyś czytał twój kod od razu połapał się o co chodzi. Czyli zapisuj to tak:
${$zmienna} = „jakaś wartosc”;
w ten sposób od razu widać o co chodzi…
Zmienne nazwy funkcji:
Ten temat jest bardzo prosty. Chodzi mianowicie o to że możesz wykorzystać wartość zmiennej do wywołania odpowiedniej funkcji. Dla przykładu możemy założyć że piszesz skrypt downloadu z możliwością uploadu. w zależności od akcji chcesz uruchomić inną funkcję. Masz dwie funkcje: download i upload. W pewnym momencie skryptu musisz zdecydować którą z nich uruchomić, można to zrobić w ten sposób:
| <?php
//kod skryptu $akcja( $plik ); //dalszy kod skryptu ?> |
w zależności od zawartości zmiennej $akcja (download lub upload), plik zostanie ściągnięty lub załadowany na serwer.
Zmienne nazwy obiektów:
Tu sprawa jest podobnie prosta jak w nazwach funkcji. Po prostu nazwę obiektu możemy również przechowywać w zmiennej. Mamy dla przykładu serwis o grach. W zależności od tego na stronę której gry wchodzimy (gra akcji, przygodówka, strategia), definiujemy odpowiedni obiekt. Przykładowy kod może wyglądać tak:
| <?php
//kod skryptu $aktualnaGra = new $rodzaj( $nazwaGry ); //dalszy kod skryptu ?> |
w tym przypadku każda klasa posiada konstruktor który przyjmuje jako parametr nazwę gry i w związku z nią nawiązuje dalsze akcje, ale nie o to chodziło. Chodzi o to aby było słowo kluczowe 'new’ przed nazwą zmiennej, wtedy będzie wszystko wiadomo, czyli konstrukcja taka jest również poprawna:
| <?php
//kod skryptu $aktualnaGra = new $rodzaj; //dalszy kod skryptu ?> |
w wypadku gdy klasa korzysta np. ze zmiennych globalnych.
Tablice:
Jest jedna sprawa którą trzeba poruszyć co do nazw. Jeżeli w grę wchodzą tablice, to musimy sprecyzować czy chodzi nam o zmienną nazwę tablicy, czy o element tablicy jako nazwę zmiennej. Jeżeli używamy zmiennej jako nazwy tablicy, robimy to w ten sposób:
| ${$zmienna}[5] = 'jakaś wartość’; |
Jeżeli natomiast chcemy użyć elementu tablicy jako nazwy to robimy to w ten sposób:
| ${$tablica[5]} = 'jakaś wartość’; |
Pozostawiam wam do sprawdzenia jaki efekt daje taki zapis:
| $$tablica[5] = 'jakaś wartość’; |
To tyle jeśli chodzi o temat zmiennych jako nazw…
