PHP: Definiowanie klasy wewnątrz funkcji lub metody.

Język PHP zawiera w sobie dużo różnych “sztuczek”, przez co nasze życie może stać się o wiele łatwiejsze, ale istnieje możliwość, że zostanie przez nas znienawidzony do końca życia. W dzisiejszym wpisie chciałbym pokazać i wyjaśnić jedną z bardzo niejasnych i bardzo brzegowych kwestii, jaką jest zachowanie zasięgu zmiennych podczas przechodzenia do innych plików [np. w przypadku ich includowania]. Zapraszam do lektury. Fotografia: Milian Wolff, CC-BY.

TL;DR.

Nie da się zdefiniować klasy ani wewnątrz funkcji, ani wewnątrz metody. Jeśli chcesz wiedzieć dlaczego - czytaj dalej.

PHP: Definiowanie klasy wewnątrz funkcji lub metody.

Rozważmy następującą sytuację:

PHP: Błąd "Parse error, unexpected '<' in Command line code on line n".
Interpreter PHP, poza oczywistą funkcjonalnością dotyczącą wykonywania napisanego przez nas kodu posiada kilka innych ciekawych możliwości. Jedną z nich jest wykonywanie fragmentu kodu przekazanego bezpośrednio jako parametr wywołania. W dzisiejszym wpisie chciałbym pokazać jeden z problemów, na jaki można w tym przypadku natrafić. PHP: Przełącznik “-r”. Aby uruchomić wspomnianą funkcjonalność, należy wywołać interpreter PHP z przełącznikiem “-r”, po którym należy przekazać parametr zawierający żądany przez nas kod. Weźmy pod uwagę przykładowe wywołanie:
[WampServer] Błąd: The configuration file contains a syntax error on line n: [EParseError] Invalid Section tag.

Jakiś czas temu miałem nieodpartą chęć spróbowania nowych funkcjonalności, jakie wprowadzono w PHP 5.3. Przestrzenie nazw oraz late static binding, to tylko niektóre z bardzo przydatnych nowości - na pewno doceni to niejeden programista. Jednak ze względu na fakt, że życie w moim [naszym? ;]] zawodzie nie jest usłane różami, nawet sama aktualizacja instalacji serwera lokalnego przysporzyła trochę problemów. Jednym z nich jest błąd w plikach konfiguracyjnych, którego naprawę opiszę dzisiaj.

Problem.

Dzisiejszy post traktuje o bardzo “brzegowej” sytuacji, która w wielu przypadkach uniemożliwia pracę serwera lokalnego opartego o instalację pakietu WampServer.

[PHP] Błąd: Call-time pass-by-reference has been deprecated.
Od pewnego czasu korzystam z pewnej bardzo ciekawej aplikacji pomagającego w zarządzaniu projektami. Redmine, bo tak jej “na imię” spełnia praktycznie wszystkie moje wymagania w tym zakresie, poza faktem, że jej wydajność jest “mocno średnia” [jest napisana w Ruby on Rails]. Dzisiaj jednak siadając przy komputerze stwierdziłem, że spróbuję czegoś nowego. Ze względu na to, że miałem przez chwilę styczność z polecanym przez jednego z kolegów OpenGoo zaprosiłem “na warsztat” właśnie ten “kawałek kodu”.