Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Łukasz Adamczewski, dodany: 28.04.2010 09:13, tagi: php

Tydzień temu prezentowałem na swoich seminariach inżynierskich ogólne zapatrywania na swój temat dla zainteresowanych załączam prezentację.
Wykorzystanie frameworku Symfony

Autor wpisu: batman, dodany: 22.04.2010 18:07, tagi: php

Jakiś czas temu dyskutowałem na jednym z blogów na temat separatora dla przestrzeni nazw. Niestety autor bloga z jakiejś przyczyny nie chciał zaakceptować moich argumentów i nie opublikował moich komentarzy. Zainspirowało mnie to do dzisiejszego wpisu. Poniżej zebrałem wszystko to, co nie podoba mi się w PHP. Niekonsekwencja. Funkcje nazywane są raz z podkreśleniem w nazwie, raz bez

Autor wpisu: Łukasz Adamczewski, dodany: 22.04.2010 09:34, tagi: php

Rozpocząłem pracę nad pracą inżynierską o powyższym temacie. Pragnąłbym zawrzeć w niej kurs zgodnie z ideą 30 dniowego samouczka, po której będzie można wykonać zaawansowaną aplikację. Moim marzeniem byłoby, aby publikacja była rzetelnym polskim źródłem na temat tegoż frameworka

Autor wpisu: batman, dodany: 20.04.2010 20:23, tagi: javascript, jquery

Potrzebowałem dzisiaj zastosować plugin jQuery, który jednym słowem można określić karuzela. Funkcjonalność jaką miał realizować to pokazywanie po kolei podobnych elementów, np galerii zdjęć. Niestety wszystkie pluginy jakie udało mi się znaleźć nie spełniały moich oczekiwań. Dlatego też napisałem swój własny. Na chwilę obecną jest on bardzo prosty, jednak w zupełności wystarcza. Sądzę, że co

Autor wpisu: Piotr Śliwa, dodany: 18.04.2010 12:46, tagi: php

Niedawno w ofercie wydawnictwa helion pojawiła się ciekawa książka - Czyty Kod (ang. "Clean code", autor Robert C. Martin). Książka ta opisuje techniki oraz zasady pisania czystego, czytelnego oraz modyfikowalnego kodu. Kilka zasad z tej książki w mojej opinii jest dosyć kontrowersyjnych, ale książka sama w sobie porusza bardzo ważną kwestię, a przede wszystkim jest ona naprawdę dobra.

Głównymi przesłaniami tej książki to:


  • waga nazewnictwa klas, funkcji, zmiennych składowych, zmiennych lokalnych i wszystkich pozostałych bytów (pakietów, przestrzeni nazw itp.)

  • wszystkie byty (klasy, funkcje, struktury danych itp.) powinny być maksymalnie proste i krótkie. Powinny przedstawiać jedną rzecz, realizować jedną czynność, której istota jest zawarta w opisowej nazwie (punkt pierwszy)

Od tych dwóch zaleceń wywodzi się szereg innych dotyczących zasad budowania klas, funkcji, zależności między modułami i wiele innych. Nie będę ich tutaj oczywiście przytaczał, zainteresowanych odsyłam do tej pozycji.

Idąc śladami autora tej książki, przebuduję mój kod który już wcześniej zamieściłem w notce "Wielostronicowe formularze". Napisałem testy jednostkowe do tej klasy (pisząc plugin, testów nie napisałem ;]), po każdej wprowadzonej zmianie odpalałem testy aby sprawdzić czy klasa nadal działa tak jak powinna.

Nazewnictwo

Pierwszą rzeczą którą zrobiłem to zmiany nazw niektórych metod oraz składowych:
- zmiana get/setPage() na get/setCurrentPageNumber, validatePage na validatePageNumber
- zmiana getPages() na getNumberOfForms()
- zmiana składowej globalNamespace na useGlobalNamespace, analogicznie zmiana nazwy metod dostępowych

Zawahałem się przy metodzie setForms, okazało się że nazwa tej metody wprowadza w błąd, gdyż nie ustawia ona formularzy, a jedynie nadpisuje formularze dla pierwszych stron (błąd logiczny - jeśli przekazaliśmy mniejszą liczbę formularzy niż było ich wcześniej, to na końcu tablicy zostaną formularze z przed wywołania metody). Zdecydowałem się na napisanie dodatkowej funkcji o nazwie addForms, która dopisuje tablicę formularzy. Metoda setForms, tak jak nazwa wskazuje, nadpisuje wcześniej dodane formularze.

Wprowadziłem również inne drobne zmiany nazw (np. zmiennych lokalnych) i wydają się już one być dobre, teraz czas zająć się metodami.

Metody / funkcje

Najważniejsze jest to aby metoda operowała na jednym poziomie abstrakcji, realizowała jedną czynność i była maksymalnie krótka. Na pierwszy rzut oka większość metod spełnia te warunki, ale jest kilka które należałoby poprawić.

Na pierwszy ogień poszła metoda addForm.

[PHP]
  1. public function addForm(sfForm $form)
  2. {
  3. $index = count($this->forms);
  4. $form->setOption('page', $index+1);
  5. $this->forms[$index] = $form;
  6.  
  7. if(!$this->isUseGlobalNamespace() && $key = $this->getFormKeyName($form, true))
  8. {
  9. $format = $form->getWidgetSchema()->getNameFormat();
  10. $format = sprintf($this->getNameFormat(), substr($format, 0, $k = strpos($format, '['))).substr($format, $k);
  11. $form->getWidgetSchema()->setNameFormat($format);
  12. }
  13. else
  14. {
  15. $form->getWidgetSchema()->setNameFormat($this->getNameFormat());
  16. }
  17. }

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: batman, dodany: 18.04.2010 12:07, tagi: php

W jaki sposób realizowana jest komunikacja w trybie rzeczywistym pomiędzy serwerem i klientem? Najczęściej wykorzystywany w tym celu jest AJAX. Żądanie wysyłane jest co określoną ilość sekund/minut i w zależności od jego wyniku, wykonywane są odpowiednie akcje. Rozwiązanie to ma dwie zasadnicze wady. Po pierwsze generowany jest ogromny ruch. Po drugie, informacje o zdarzeniach pojawiają się z

Autor wpisu: Marcin MySZ Sztolcman, dodany: 15.04.2010 22:48, tagi: mysql

Dziś kumpel miał za zadanie zrobić prostą funkcję, która z kolekcji usług spełniających odpowiednie kryteria wybierze jedną, której da specjalne przywileje. Jeśli w wybranym zestawie znajdzie się usługa danego typu, to tej usłudze, pierwszej w kolejności należy te przywileje dać.

Tych usług spełniających kryteria nawet w najgorszym wypadku nie ma więcej jak kilkanaście, więc można wybrać sobie wszystkie do (w tym przypadku) Perla, i odpowiednią pętlą z warunkami znaleźć te co trzeba. Zamiast tego, przerzuciliśmy to do MySQL, sortując tych kilka elementów:

[...] ORDER BY `type`, `id` LIMIT 1[...]

Byłoby idealnie, gdyby nie to, że najbardziej potrzebny nam typ wcale nie jest pierwszy w kolejności (niezależnie czy pierwszy od początku czy od końca ;) ). Zakładając, że mamy typy liczbowe: 1, 2, 3, 4, 5, i chcemy mieć je w kolejności: najpierw wszystkie z typu 3, później wszystkie z typu 5, kolejno wszystkie z typu 2, a reszta bez znaczenia, to zaczyna robić się ciekawie ;) Jednym ze sposobów jest użycie UNII. My użyliśmy innego: funkcji FIELD(). Jak działa w ogóle ta funkcja, można przeczytać w podlinkowanym kawałku manuala. Niżej za to jest przykład, jak jej użyć do naszego celu:

SELECT `f1`, `f2`, `type` FROM `table` WHERE [warunki] ORDER BY FIELD(`type`, 3, 5, 2, 1, 4) ASC, `id` ASC

Tym sposobem mamy posortowane tak jak chcemy elementy, i mniej zabawy po odebraniu danych ;) Ale uwaga: to nie jest optymalne rozwiązanie, jeśli trzeba przetworzyć większą ilość elementów! Użycie funkcji (w tym wypadku FIELD()) przy sortowaniu/w warunku spowoduje że MySQL będzie musiał gdzieś sobie przechować dane do posortowania, i zazwyczaj użyje tabeli tymczasowej (chyba że tych danych będzie niewiele). A jedno z drugim potrafi nieco zamulić maszynę ;)

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.