Linkdump #61: PHP.

Co tu dużo pisać - przed Wami kolejny Linkdump związany z PHP, zapraszam do lektury!

Linkdump #55: PHP - Personal Home Page.

Język PHP to dla wielu programistów sposób patrzenia na tworzenie różnego rodzaju stron internetowych. W wielu miejscach krytykowany, w wielu chwalony - w pewnym sensie podzielił środowisko webdeveloperów na zwolenników oraz przeciwników tej technologii. Ja mam przyjemność stać po pierwszej z wymienionych stron, dlatego zapraszam do przejrzenia kolejnej partii linków związanych z językiem PHP i różnymi związanymi z nim narzędziami.

symfony: Pobieranie tablic z obiektów klasy sfOutputEscaperArrayDecorator.

Framework symfony, jak praktycznie każdy na rynku ma swoje “smaczki”, które czasem umilają, a czasem bardzo utrudniają tworzenie kolejnych funkcji projektu - zamiast zająć się właściwą pracą musimy przeszukiwać strony manuala i “czeluści” Internetu, aby znaleźć Jedyną Słuszną (tm) drogę wykonania danego zadania. W dzisiejszym wpisie chciałbym pokazać, w jaki sposób “dobrać się” do “niewyescape’owanych” danych [konia z rzędem temu, kto poda dobre polskie tłumaczenie tego terminu ;]] tablicy zamkniętej w kontenerze klasy sfOutputEscaperArrayDecorator.

Linkdump #52: ABC PHP.

Ten Linkdump jest zdecydowanie spóźniony - to chyba pierwszy wpis, z którym “nie wyrobiłem” się w ciągu dwóch dni względem Harmonogramu. Tak to jednak jest, jak się ma tyle pracy, że po tych kilkunastu godzinach człowiek już nawet nie myśli o tym, że gdzieś w Internecie istnieje jakaś strona, którą się zarządza, a tym bardziej, że wypadałoby ją nieco zaktualizować. Dlatego dzisiaj naprawiam swój błąd i publikuję zaległy Linkdump z niedzieli. Zapraszam do lektury!

Google Translate: Blokowanie tłumaczenia elementów na stronie internetowej.

Myślę, że nie popełnię dużego błędu, jeśli powiem, że każdy, kto kiedykolwiek potrzebował tłumaczenia pewnych informacji z nieznanego języka na “swój”, na pewno trafił kiedyś na narzędzie Google Translate. Jest to bezsprzecznie jeden z najlepszych translatorów na rynku, także trudno się dziwić, że jest tak powszechnie wykorzystywany. Także my, twórcy stron internetowych często korzystamy z niego, ponieważ udostępnia bez większego problemu możliwość dynamicznego tłumaczenia tekstu na stronie. Czasem jednak jest to zachowanie niepożądane, a więc wypada wiedzieć, jak to zablokować. Zapraszam do lektury dzisiejszego wpisu.

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.

PHP: Błąd "Strict Standards: Redefining already defined constructor for class".

Podczas pisania pracy inżynierskiej natknąłem się na kilka ciekawych miejsc w kodzie, “produkujących” nieznane mi do tej pory błędy. Być może miałem świadomość ich istnienia, ale nie udało mi się jeszcze ich “popełnić”. W dzisiejszym wpisie chciałbym przedstawić Wam kolejny problem, tym razem dotyczący pewnych starszych mechanizmów języka PHP. Zapraszam do lektury.

PHP: Deklaracja sygnatury konstruktora klasy w interfejsie.

Konstruktor klasy jest specjalną funkcją uruchamianą automatycznie podczas tworzenia nowej instancji klasy, jednokrotnie w trakcie życia danego obiektu (oczywiście możemy potem w jawny sposób wywołać go w kodzie, jednakże nie jest to polecana praktyka programistyczna). W języku PHP to stwierdzenie także jest prawdziwe, aczkolwiek w wielu miejscach interpreter udowadnia nam, że z powodzeniem możemy potraktować konstruktor jak zwykłą funkcję.

[PHP] Zapisywanie zserializowanych obiektów do sesji i błąd __PHP_Incomplete_Class.

W kwestii obsługi sesji i rodzaju zapisywanych w niej danych programiści PHP dzielą się na dwa skrajne fronty: tych, którzy preferują zapis wyłącznie typów prostych i tych, którzy nie widzą problemu w trzymaniu w niej całych obiektów. Ja stoję murem za typami prostymi, ponieważ wydaje mi się bardziej optymalne zapisywanie tylko niezbędnych informacji, na podstawie których ewentualne obiekty można odtworzyć, pozwala to też na zmniejszenie obciążenia serwera, bo odczytanie sesji wymaga deserializacji [odserializowania? deserializowania? kolejne "ciężkopolskie" słowo...] i parsowania o wiele mniejszego pliku. Jakkolwiek byśmy jednak do tego nie podchodzili, dzisiejszy wpis także może być argumentem in plus dla zapisywania wyłącznie zmiennych typów prostych, ponieważ jak mówi stare programistyczne porzekadło: "Serializujesz obiekty [do sesji]? No to masz problem!". ;]

[C++] Klasy zaprzyjaźnione: "co je twoje, to je moje, a co moje, to nie rusz".

Dzisiaj czytałem nieco o klasach zaprzyjaźnionych w języku C++ [ang. friend classes] i podczas lektury jednego z artykułów przypomniało mi się znane z podstawówki powiedzenie “co je twoje, to je moje, a co moje, to nie rusz”. Przez chwilę patrzyłem na przykładowy kod i nagle wpadł mi do głowy pewien pomysł. Wymyśliłem implementację tego powiedzenia w C++. ;] Oznaczenie klasy jako zaprzyjaźnionej z inną oznacza m. in. to, że wszystkie atrybuty tej pierwszej, niezależnie od klasyfikatora dostępu [public, protected, private] stają się dostępne dla drugiej bez żadnych ograniczeń. Pierwsza klasa “przekazuje” wszystkie informacje o sobie tej drugiej tak, jakby kwalifikatorem dostępu dla wszystkich jej elementów [atrybutów i metod] było słowo kluczowe public. Analogia jest, przynajmniej dla mnie, bardzo wyraźna. ;]