Uchwycić moment…

menic’s devBlog

Archive for kwiecień, 2007

II semestr

NARESZCIE
Od wczoraj jestem już pełnowartościowym studentem II semestru. Ostatnia rzecz która mnie zatrzymywała to był egzamin warunkowy z Podstaw Informatyki. Ocena całkiem przyzwoita: 4.5 :) Jeszcze tego samego dnia zdobyłem wpis i złozyłem index.
Uffff…. Co za ulga :D

No comments

Obsługa bazy danych cd.

Moje wahania co do budowy klasy zarzadzajacej bazą danych już sie skonczyły. Większośc jest gotowa. Do tabel odwołujemy sie przez

PHP:
  1. $o->getPole()

a do złączonych

PHP:
  1. $o->joinedTable->getPole()

. Dzięki temu łatwo było zaimplementować dodatkowe funkcje - jak na razie tylko sprawdzające (reszta wkrótce). Np. jesli dodamy w WHERE pole, ktorego nie ma w tabeli to zamiast czekać na bład bazy danych, sami go wczesniej wyłapiemy :)
Inne smaczki sa przy zapytaniach UPDATE i INSERT. W setterach nastepuje sprawdzanie czy podana przez nas wartosc jest takiego typu jakiego oczekujemy, czy np. nikt nie starał sie wsadzić string'a do int'a itp. Przyda sie pewnie też bajer jak sprawdzanie czy dodalismy wszystkie wartosci. Tzn. Niektore pola sa wymagane jak np. tytuł, a inne (id ktory jest auto_increment) nie. Jesli czegoś nam zabraknie to przy wykonaniu polecenia tez bedzie stosowny bład. Całość oczywiście jest bardzo ładnie generowana automatycznie na pdst. XMLa. Np. taki schemat

XML:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <database name="sw">
  4. <table name="def"><column name="id" type="int" size="10" primary="true" />
  5. <column name="author_id" type="int" size="10" required="true" />
  6. <column name="cat_id" type="int" size="10" required="true" />
  7. <column name="title" type="varchar" size="255" required="true" />
  8. <column name="deleted" type="bool" />
  9. <foreigntable>author</foreigntable>
  10. <foreigntable>cat</foreigntable></table>
  11. <table name="author"><column name="id" type="int" size="11" primary="true" />
  12. <column name="name" type="varchar" size="255" />
  13. <column name="title" type="varchar" size="255" /></table>
  14. <table name="cat"><column name="id" type="int" size="11" primary="true" />
  15. <column name="name" type="varchar" size="255" /></table>
  16. </database>

wygeneruje nam 9(!) plików z kodem PHP :)
Mam do tego jeszcze cache, ale zastanawiam sie nad jego sensem. Wprawdzie przy pobieraniu 5000 tys. rekordów jakas róznica w czasie była, ale niewielka.

3 comments

Obsługa bazy danych

Znowu zawitały ciche dni na blogu :) Spowodowane było to róznymi sprawami (głównie natury uczelnianej). Na razie wszystko sie uspokoiło, wiec coś trzeba skrobnąć. Na chwile obecną męcze sie z klasa do wykonywania polecen na bazie danych. Mam juz praktycznie głowny szkielet oparty na wzorcu AcitveRecord, ale myśle że to za mało. Tzn. zależy pod jakim względem za mało ;) Sama klasa do obsługi zapytan SELECT i UPDATE to niecałe 500 lini kodu bez komentarzy i obsługi wyjątków (gdyz takowej jeszcze nie przygotowałem :/). Mało nie jest. Dużo?... Tez nie.
Do pol w tabeli w przypadku zwykłego select odwołujemy sie po prostu

PHP:
  1. echo $o->Pole

. Do pol z JOINem

PHP:
  1. echo $o->joinedTable->Pole

. Z racji jednak, że bardzo przyzwyczaiłem sie do podpowiadania składni w Eclipse (dzięki NuLLowi [tak sie to odmienia;) ?]) przydałyby sie metody typu

PHP:
  1. echo $o->getPole()

jak w propel'u :) Wiąże sie to jednak ze znaczną rozbudową kodu i troche wiekszą zasobożernością. No bo dla 20 rekordów trzeba 20 nowych rozbudowanych obiektów... Jeszcze musze to przemyśleć (czekam na komentarze :>). Samo generowanie klas trudne nie będzie przy pomocy xml'a, którego bardzo polubiłem, odkąd się z nim zapoznałem. Niech jakies yml'e się chowają :D

2 comments

class_exists() oraz __autoload()

Jeśli używacie funkcji class_exists() a jest w skrypcie zdefiniowana funkcja __autoload() to przy użyciu class_exists() jest automatycznie uruchamiane __autoload(). Aby temu zapobiec należy dodać parametr false do class_exists().
Może zaoszczedzi to komuś szukania ;-)

1 comment

unserialize() i SimpleXML Object

Chciałem sobie napisać mała klase do obsługi cache SimpleXML. Cel był taki, aby przy każdym rządaniu nie parsować pliku za pomocą simplexml_load_file(), tylko zrobić unserialize() poprzednio zserializowanego obiektu. serialize() przebiegło bez problemu. Gorzej niestety w drugą stronę. Wykonanie unserialize() na zserializowanym obiekcie skutkuje takim o to błedem

Warning: unserialize() [function.unserialize]: Node no longer exists in ....

Tak wiec pomysł z klasą cache został pogrzebany :|

5 comments