Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pisze swój framework
Forum PHP.pl > Forum > PHP > Object-oriented programming
Landon
Witam chciałbym prosić o opinie i sugestie... Zacząłem pisać framework by ułatwić sobie pracę tongue.gif Pierwsze co zrobiłem to wystukałem takie coś.. Pobiera klasy z 2 plików przypisuje do zmiennych tworzy obiekty no i zwraca obiekt. Pisze w PHP 5. Przyjmując że To będzie główna klasa parent dla innych. Przypisuje stworzone obiekty do $lists by móc wykorzystać w innych klasach dodatkowo 2 atrybut $parametr to tablica o ile w __construct klasy potrzebne jest podanie tych parametrów:
  1. <?
  2. class Karnel {
  3. public $lists = array();
  4.  
  5. public function __construct() {
  6. $this -> lists['Karnel'] = $this;
  7. }
  8.  
  9. public function load($className, $parametr = false) {
  10. if (!in_array($className, $this -> lists)) {
  11. if (file_exists("class/".$className.".class.php")) {
  12. require_once("class/".$className.".class.php");
  13. $this -> lists[$className] = ($paramtr) ? new $className($paramtr) : new $className;
  14. return $this -> lists[$className];
  15. } elseif (file_exists("lib/".$className."/".$className.".class.php")) {
  16. require_once("lib/".$className."/".$className.".class.php");
  17. $this -> lists[$className] = ($paramtr) ? new $className($paramtr) : new $className;
  18. return $this -> lists[$className];
  19. }
  20. }
  21. }
  22. }
  23. ?>


Wywołuje np:

  1. <?
  2. require_once("class/Karnel.class.php");
  3. $Karnel = new Karnel;
  4. $Session = $Karnel -> load('Session');
  5. echo '<img src="token.php"><br>'.
  6. $Session -> getAttribute('token').'<br><br>';
  7. ?>


No ale co dalej? Musze napisać przydatne klasy itd... i to wszystko? Dopiero się uczę OOP tongue.gif ...

A i proszę modernatora o przeniesienie tongue.gif do PHP ->> OOP
empathon
Gdybyś przejrzał dokładniej manual zauważyłbyś autoload.
Landon
Wiedziałem o autoload lecz mi chodzi o całkiem coć innego chce od razu tworzyć obiekty w return + przypisać je do zmiennej 'public $lists;'... All działa tongue.gif no ale co dalej...
dr_bonzo
Zacznij od pisania jakiejs konkretnej aplikacji - to bedziesz wiedzial czego ci brakuje, co cie wnerwia podczas kodzenia, co mozna uproscic, zamiast kopiowac w kazdym pliku po 100 razy
mike
Cytat(Landon @ 14.05.2008, 19:22:37 ) *
Wiedziałem o autoload lecz mi chodzi o całkiem coć innego chce od razu tworzyć obiekty w return + przypisać je do zmiennej 'public $lists;'...
Po co? Przecież to głupota.
Tworzenie masy niepotrzebnych obiektów jest bez sensu.
.radex
Karnel? A nie kernel przypadkiem?

Karnel (n=m) to jest w snickersie.
Landon
Dopisałem parser xml tongue.gif Klase z przydatnymi funkcjami, No i do bazy mysql

  1. <?php
  2. class Xml extends Karnel {
  3. private $dom = null;
  4. private $response_node = null;
  5. private $xml_node = array();
  6. private $num = 0;
  7.  
  8. function __construct(){
  9. $this -> dom = new DOMDocument("1.0");
  10. $this -> response_node = $this->dom->createElement("linki");
  11. $this -> dom -> appendChild($this -> response_node);
  12. }
  13.  
  14. function dodaj($dane, $kay) {
  15. $this -> xml_node[$this->num] = $this -> dom -> createElement("strony");
  16. $this -> response_node -> appendChild($this -> xml_node[$this->num]);
  17. if (isset($dane)) {
  18. foreach($dane as $k => $w){
  19. $xml_node[$this->num] = $this -> dom -> createElement("pole");
  20. $this -> xml_node[$this->num] -> appendChild($xml_node[$this->num]);
  21. foreach($w as $ks => $ws){
  22. $xml_node[$this->num] -> setAttribute($ks, $ws['0']);
  23. }
  24. $xml_node[$this->num] -> setAttribute("name", $k);
  25. }
  26. }
  27. $this->num++;
  28. }
  29.  
  30. function __destruct(){
  31. header("Content-type: text/xml; charset=utf-8"); 
  32. print $this -> dom -> saveXML();
  33. }
  34. }
  35. ?>


Teraz obsługa sesji/cookie itd no i na tym to polega :?
przydał by się cache i szablony. A tak poza tym zbytniej różnicy pomiędzy tym a strukturalnym nie widzę...
Cytat(mike @ 14.05.2008, 20:15:03 ) *
Po co? Przecież to głupota.
Tworzenie masy niepotrzebnych obiektów jest bez sensu.

Jak to masy obiektów przecież będzie max kilka obiektów i w sumie mogę dodać wyłączenie tworzenia w miarę potrzeby tongue.gif

  1. <?
  2. class Karnel {
  3. public $lists = array();
  4.  
  5. public function __construct() {
  6. $this -> lists['Karnel'] = $this;
  7. }
  8.  
  9. public function load($className, $parametr = false, $new = true) {
  10. if (!in_array($className, $this -> lists)) {
  11. if (file_exists('class/'.$className.'.class.php')) 
  12. require_once('class/'.$className.'.class.php');
  13. elseif (file_exists('class/xml/'.$className.'.class.php')) 
  14. require_once('class/xml/'.$className.'.class.php');
  15. elseif (file_exists('lib/'.$className.'/'.$className.'.class.php')) 
  16. require_once('lib/'.$className.'/'.$className.'.class.php');
  17. else 
  18. return false;
  19. if ($new) $this -> lists[$className] = ($parametr) ? new $className($parametr) : new $className;
  20. else $this -> lists[$className] = true;
  21. return $this -> lists[$className];
  22. }
  23. }
  24. }
  25. ?>


Edit: poprawiłem jeszcze raz tak czytelniej tongue.gif
jarek_bolo
Wydaje mi się że nie za bardzo kumasz co to framework, albo zbyt to upraszczasz.
Gdyby to wyglądało tak hop siup jak Ty to opisujesz to CakePHP, Khana czy Symfony składały by się z paru plików i klas.
Landon
Dlatego chce abyście mnie uświadomili co robię nie tak tongue.gif

Co do np symfony na początku w pliku symfony.php wczytywane są wszystkie pliki o ile nie istnieje sfConfig::get('sf_in_bootstrap');
a nie zawsze wszystkie są potrzebne smile.gif

  1. <?php
  2. $sf_symfony_lib_dir = sfConfig::get('sf_symfony_lib_dir');
  3. if (!sfConfig::get('sf_in_bootstrap')) {
  4. // YAML support
  5. require_once($sf_symfony_lib_dir.'/util/sfYaml.class.php');
  6.  
  7. // cache support
  8. require_once($sf_symfony_lib_dir.'/cache/sfCache.class.php');
  9. require_once($sf_symfony_lib_dir.'/cache/sfFileCache.class.php');
  10.  
  11. // config support
  12. require_once($sf_symfony_lib_dir.'/config/sfConfigCache.class.php');
  13. require_once($sf_symfony_lib_dir.'/config/sfConfigHandler.class.php');
  14. require_once($sf_symfony_lib_dir.'/config/sfYamlConfigHandler.class.php');
  15. require_once($sf_symfony_lib_dir.'/config/sfAutoloadConfigHandler.class.php');
  16. require_once($sf_symfony_lib_dir.'/config/sfRootConfigHandler.class.php');
  17. require_once($sf_symfony_lib_dir.'/config/sfLoader.class.php');
  18.  
  19. // basic exception classes
  20. require_once($sf_symfony_lib_dir.'/exception/sfException.class.php');
  21. require_once($sf_symfony_lib_dir.'/exception/sfAutoloadException.class.php');
  22. require_once($sf_symfony_lib_dir.'/exception/sfCacheException.class.php');
  23. require_once($sf_symfony_lib_dir.'/exception/sfConfigurationException.class.php');
  24. require_once($sf_symfony_lib_dir.'/exception/sfParseException.class.php');
  25.  
  26. // utils
  27. require_once($sf_symfony_lib_dir.'/util/sfParameterHolder.class.php');
  28. } else {
  29. require_once($sf_symfony_lib_dir.'/config/sfConfigCache.class.php');
  30. }
  31. ?>
dr_bonzo
Landon: napisz w tym aplikacje; albo pobaw sie innymi FW, chociazby Kohana i poczujesz roznice, pozatym to OOP co pokazales to sux na maxa - czemu klasa biblioteczna (xml) zajmuje sie naglowkami http i wysylaniem danych do usera?
Landon
Klasa xml przeznaczona jest do parsera z ajaxa i przekazywane są zdarzenia etc... miałem wcześniej wiele klas do wielu typów danych teraz jest jedna tongue.gif

można robić to za pomocą json ale ja wole tak
Strzałek
Cytat
Dlatego chce abyście mnie uświadomili co robię nie tak tongue.gif


Właściwie to nic. To nie jest klasówka z matematyki gdzie masz jedno właściwe rozwiązanie. Robisz jak Ci wygodnie.

Jeżeli wygodniej, szybiciej i lepiej będzie Ci się pracowało na własnym fw to piszesz włansny, który działa tak jak chcesz, piszesz go sobie pod siebie.
Możesz skorzystać z gotowych rozwiązań - Symfony, Agavi, Cake.
Landon
A co do projektu to robię taką małą stronkę na razie w większej części strukturalna ale przerobie smile.gif

Najważniejsze jest to czy macie jakieś rady i mądre sposoby aby ładnie mi wyszedł :?
Cysiaczek
A dlaczego nie przeczytasz tego, co już jest napisane na forum? Jest tego naprawdę sporo. Wiem, że nie liczy sie kodu na wagę, ale o FW możemy mówić, jeśli ma 300 KB (bibliotek, nie z przykładami i bez html) i więcej. To oznacza, że można się spodziewać przynajmniej podstawowych narzędzi na średnim poziomie. Wtedy też można coś powiedzieć o takiej pracy. Ty rzucasz 50 linijek kodu i pytasz co dalej. No i co My Ci mamy odpowiedzieć? Każdy FW ma własne rozwiązania. Osobiście uważam, że najlepszym użytkowo jest Symfony, choć do samej organizacji kodu mam nieco obiekcji. Wzoruj sie na innych frameworkach. Byle nie na Kohana, bo ichniejsi developerzy jak nie wiedzą, gdzie umieścić kod, to wkładają go do klasy Kohana ;p
IMO, najpierw rozpisz sobie jak wyglądać ma działanie twojego FW, a dopiero potem implementuj. Jak nie masz wizji, to nie pisz. Nie chce Cie zniechęcać, ale z FW jest tak jak z MVC - każdy ma swój ideał, do którego dąży i tyle.

Pozdrawiam.
Landon
Hmm no właśnie to zrobiłem pobrałem kilka frameworków no i przejrzałem pliki większość jest zbudowanych tak jak myślałem no i zabieram sie do pracy ale mam teraz jedno pytanie czy pliki konfiguracyjne powinny być zapisywane w ini czy w zwykłym php może zrobię opcje wyboru| niebawem pokaże co wystukam smile.gif

Plan mam wiem co am być i co będzie potrzebne teraz tylko chęci do dokończenia pracy tongue.gif

Ładnie i szybko idzie gdy będę miał problemy napisze tutaj tongue.gif

napisałem wybór configa pomiędzy ini a php no i języki z przekierowaniem na domenę lub bez.. Jak na razie 300kb no ale np dodałem smarty do tego bo pracuje na nim tongue.gif tylko trochę modyfikacji jest ....
Whisller
Agavi oraz Symfony i moja skromna rada, zostaw w spokoju pisanie swojego frameworka.
Landon
hmm dlaczego tak uważasz? W sumie robię co chcę. Dlatego pisze coś o szczebel więcej od tego czego nie umiem. Więc chcę napisać coś w czym będzie mi się mile pracować... Dodać wszystko co przydatne i zbudować ładna stronkę w PHP5 tongue.gif

Poprawiłem w tym XML bo były bugi

  1. <?php
  2. class Xml extends Karnel {
  3. private $dom = null;
  4. private $response_node = null;
  5.  
  6. private $xml_node = array();
  7. private $num = 0;
  8.  
  9. function __construct(){
  10. $this -> dom = new DOMDocument("1.0");
  11. $this -> response_node = $this->dom->createElement("linki");
  12. $this -> dom -> appendChild($this -> response_node);
  13. }
  14.  
  15. function dodaj($dane, $kay, $name='pole') {
  16. if ($kay && is_array($dane)) {
  17. $this -> xml_node[$this->num] = $this -> dom -> createElement($kay);
  18. $this -> response_node -> appendChild($this -> xml_node[$this->num]);
  19. foreach($dane as $k => $w) {
  20. $xml_node[$this->num] = $this -> dom -> createElement($name);
  21. $this -> xml_node[$this->num] -> appendChild($xml_node[$this->num]);
  22. if (is_array($w)) {
  23. foreach($w as $ks => $ws){
  24. $xml_node[$this->num] -> setAttribute($ks, $ws['0']);
  25. }
  26. } else {
  27. $xml_node[$this->num] -> setAttribute($k, $w);
  28. }
  29. }
  30. $this->num++;
  31. } else Debug::error('Zostały podane złe dane', 'XML');
  32. }
  33.  
  34. function __destruct(){
  35. header("Content-type: text/xml; charset=utf-8"); 
  36. print $this -> dom -> saveXML();
  37. }
  38. }
  39. ?>


Jak na razie czytam arty etc.. i coraz lepiej wychodzi tongue.gif A co do istniejących frameworków pracowałem na kilku no i nie za bardzo przypadły mi do gustu...
Strzałek
Cytat
hmm dlaczego tak uważasz?


Ponieważ u Ciebie XML dziedziczy po karnel (hę? Chyba chodziło o kernel czyli jądro) co jest całkowitą głupotą wg. mnie.
Landon
No tak zapomniałem wywalić smile.gif.. Później poprawiłem ale nie wklejeniem poprawki...
cbagov
Framework - powazne slowo, Zend ma bodajze ok 140000 linii kodu i ok 90k linii testu (nie mam pewnosci), takze masz nad czym pracowac, nie wspomne o funkcjonalnosci.
Aczkolwiek ja nie uzywam, bo mam wlasny wynalazek. Ma podobna ilosc linii kodu, robi na pewno to czego nie robi Zend ale i odwrotnie, moj nie robi wielu rzeczy jakie mozna przy pomocy Zend.
Jesli twoj FW spelni twoje oczekiwania odnosnie FW, bedzie okej winksmiley.jpg (i ewentualnego uzytkownika)

Zakladajac optymalizacje mojego mysle, ze urwaloby sie z 30% linii kodu, przechodzac jednak na full obiekt roznica bylaby pewnie ok 15% odchudzenia. Oczywiscie caly czas nad nim pracuje.


A tu dane mojego
Result for all processed Files:

361264 Lines
246432 Code lines
93637 Blank lines
21195 Comment lines

Comments in file: 5 %


3014 files have been analysed.


The results for example file:

------------------------------------------------------------------

Name: index.php

1563 Lines
456 Code lines
800 Blank lines
307 Comment lines

Comments in file: 19 %



Tu masz fajne porownanie Zend i CakePHP, ale przede wszystkim warto spojrzec, co robi taki FW.
Porownanie Zend CakePHP
Ociu
Jakie masz zamiary tworząc ten temat ? Będziesz nam zdawał relacje co nowego napisałeś ?
Landon
NIe poprostu chciałem prosić o rady i może wy doszliście do jakiś sprawdzonych metod i do tego czego brakuje w php smile.gif
chlebik
Wybacz, ale jak dla mnie podejscie pod tytulem 'sprawdzilem kilka frameworkow, ale jakos nie podeszly' z gory skresla Cie na starcie. Ja uzywam JEDNEGO frameworka w pracy (mialem narzucony przymus, wszystkie aplikacje w firmie tylko na nim) i wciaz, mimo siedzenia w nim po 8h dziennie dowiaduje sie nowych rzeczy, nowych rozwiazan, itd. Co wiecej - mowisz, ze to Twoj poczatek pracy z OOP i ze nie widzisz za wiekliej roznicy miedzy nim, a proceduralnym. To wlasnie znak, ze pisanie wlasnego frameworka to dla Ciebie o wiele za wczesnie.


Bo widzisz, framework polega na tym (jak i praca z nim), ze jest w nim zaimplementowana pelna obiektowosc. Mozesz niemalze zapomniec (generalizuje i upraszczam) o czystym PHP (poza slowami kluczowymi). Zasadniczo kazda operacje nalezy robic za pomoca komponentow FW (w notacji obiektowej), gdyz dzieki temu np. przy zapisie do bazy wykorzystasz tez mozliwosc logowania zapisow, przy obsludze zadan/responsow aplikacji ogladasz obiekty odpowiedzialne za request i response (zapominasz o funkcji header()). I tak jest na kazdym kroku - klasy, dziedziczace po klasach, a te po interfejsie - tak wyglada przynajmniej Zend Framework w ktorym pisze. I dopiero kiedy poogladasz sobie kod zrodlowy konkretnego FW, napiszesz w nim kilka aplikacji, potem zmienisz FW i znowu napiszesz kilka aplikacji, wowczas bedziesz mogl powiedziec co Ci sie podoba, a co nie i miec pojecie co nalezy robic by stworzyc wlasny FW.


To co na razie stworzyles mozna (i tez jeszcze upraszczajac i przymykajac oczy) nazwac 'biblioteka klas', bo FW to na pewno nie jest. Dobra, wygadalem sie. Teraz masz liste rzeczy o ktorych musisz przeczytac:

- wzorce projektowe --- jak poczytasz to zrozumiesz dlaczego miales przeczytac

- zagadnienia inzynierii oprogramowania (tworzenie schematow, diagramow, poczytaj sobie o UMLu) --- bys nie zgubil sie po napisaniu 5 klas bedacych w roznych miejscach

- zagadnieniach zwiazanych z bazami danych (Active Record/ORM), choc to czesciowo jest we wzorcach projektowych

- poczytaj (gdzies widzialem e-booka) o automatycznym generowaniu kodu --- przyda sie kiedy np. bedziesz probowal stworzyc jakas namiastke systemu szablonow

- dowiedz sie co to jest KISS i DRY smile.gif



Pozdrawiam
Chleb
Landon
Dzieki za sugestię zrobie tak jak mi zaproponowałeś pouczę się OOP i zaczne pisać coś w np Zend....
co do Dry i Kiss wiem co to jest tongue.gif
Crozin
Wiedzieć co to jest to jedno. Stosować się do tego to drugie winksmiley.jpg
phpion
Cytat(Landon @ 20.05.2008, 19:22:17 ) *
Dzieki za sugestię zrobie tak jak mi zaproponowałeś pouczę się OOP i zaczne pisać coś w np Zend....

Powodzenia czarodziej.gif
Zacznij lepiej od Kohana bo, z tego co widzę, na obecnym poziomie wiedzy nie ruszysz Zenda... Poznasz K, zobaczysz o co chodzi w frameworkach, minie X miesięcy, załapiesz o co chodzi w ZF.
Crozin
@phpion: dlaczego ZF miałby nie "załapać"? Co jest w nim takiego, czego nawet osoba z zerowym doświadczeniem z OOP nie zrozumie?
phpion
Cytat(Crozin @ 21.05.2008, 22:03:23 ) *
@phpion: dlaczego ZF miałby nie "załapać"? Co jest w nim takiego, czego nawet osoba z zerowym doświadczeniem z OOP nie zrozumie?

blinksmiley.gif żart? Przecież ZF to OOP aż do przesady...
Crozin
Nie bardzo wiem czym jest to "OOP aż do przesady...", ale ponownie zadaje pytanie: dlaczego miałby nie zrozumieć API tego frameworka.
chlebik
Tez zadam to pytanie - ja zaczalem z dnia na dzien pisac aplikacje w ZF kiedy zaczalem zarabiac na zycie jako koder. O co chodzilo z OOP teoretycznie wiedzialem juz dawno, ale w praktyce no to nie bardzo smile.gif Zas wlasnie uzywanie obiektow wszedzie gdzie to mozliwe (no wiadomo, ze bez przesady) jest bardzo dobre - uczy dobrych nawykow, no i jest najlepsza forma nauczenia tegoz OOP.
phpion
Czyli sugerujecie, że każdy jest w stanie z buta siąść do ZF i trzasnąć w nim aplikację? No bez jaj... No chyba, że mówimy o aplikacjach z $_POST i z globalami.
chlebik
No to zalezy od tego, co rozumiesz przez 'aplikacje'. Ja 2 tygodnie od rozpoczecia pracy dostalem do robienia modul Kasy (pracowalem jako swiezak z innymi koderem, zreszta niewiele wiecej umiejacym niz ja) - zajelo to tydzien lacznej pracy, z czego i tak najwiecej sie poswiecilo na poprawne stworzenie SQLa (statystyki i raporty kasowe) oraz generowanie PDFow. Zatem jest to mozliwe i nie mowie tego by dodac sobie +20 do lansu, ale by pokazac, ze jezeli sie chce i wie sie od kogo brac wzorce (w robocie ludzie byli takim wzorcem) to mozna nauczyc sie solidnych pdstaw i nie trzeba do tego 3 miesiecy. Fakt, ze PELNA WIEDZA oraz umiejetnosc SAMODZIELNEGO tworzenia aplikacji no to juz sprawa na miesiace/lata praktyki uzywajac danego FW.
Crozin
Na poznanie jakiegoś FW oczwyiście potrzeba nieco czasu. Ale jeżeli wie się jak używać manuala to napisanie aplikacji "z buta" jest możliwe.
phpion
Cytat(Crozin @ 22.05.2008, 15:00:36 ) *
Na poznanie jakiegoś FW oczwyiście potrzeba nieco czasu. Ale jeżeli wie się jak używać manuala to napisanie aplikacji "z buta" jest możliwe.

Nie zgodzę się. Sam często nie znajdywałem potrzebnych informacji w manualu i musiałem grzebać w źródłach ZF. Po przejrzeniu "co się dzieje w środku" mogłem zrealizować to, o co mi chodziło. W sumie zależy faktycznie czego się oczekuje od tworzonej aplikacji: można przecież przekopiować fragmenty manuala i zmienić "Hello world" na "Witaj świecie". No ale tego chyba nie potraktujemy jako pracę w ZF winksmiley.jpg
Cysiaczek
Nie wiem jak z tym ZF, ale w Symfony tak łatwo nie pójdzie. Podstawy opanujesz, a jeśli znasz propela, to nawet bardzo szybko załapiesz. Łatwo jest napisać coś prostego, schematycznego. Spróbujcie jednak napisać coś, co wykracza poza schemat "jedna strona - jeden kontroler". Trzeba grzebać w bebechach i mozolnie poznawać framework. Mnie np, ciągle zaskakuje admin generator w SF, który ma duże możliwości, ale czasami wymaga nie tyle kombinowania, co wręcz "hackowania".

Pozdrawiam.
phpion
Dokładnie jest tak, jak pisze Cysiaczek. Dodatkowo, moim zdaniem, ZF jest dużo bardziej wymagający od Symfony choćby z tego powodu, że wszystko trzeba poskładać samemu. Dla osoby, która nie miała styczności z OOP ani z innym frameworkiem (styczność = tworzenie aplikacji) ZF jest, nadal moim zdaniem, nie do ruszenia (nie mylić z kopiuj-wklej-zmień).
.radex
Mi się ZF w ogóle nie podoba. Rozumiem go, ale w przeciwieństwie do innych frameworków musisz wszystko zrobić sam - masz tylko zbiór klas + kilka dodatkowych rzeczy. Dla mnie framework to gotowa baza do napisania aplikacji - po prostu tworzysz klasy kontrolerów, modelów, widoki itd.
Sedziwoj
Cytat(radex_p @ 22.05.2008, 21:56:32 ) *
Mi się ZF w ogóle nie podoba. Rozumiem go, ale w przeciwieństwie do innych frameworków musisz wszystko zrobić sam - masz tylko zbiór klas + kilka dodatkowych rzeczy. Dla mnie framework to gotowa baza do napisania aplikacji - po prostu tworzysz klasy kontrolerów, modelów, widoki itd.


Było to już wielokrotnie pisane, ZF bardziej przypomina zbiór komponentów niż FW, może w przyszłości nim będzie, ale na razie nie jest. Dlatego dla początkującego to jest trudne, bo trzeba to złożyć, tylko pamiętajcie, że można napisać coś co działa i napisać coś co działa, tylko że to będą dwie inne jakościowo rzeczy. Bo przecież nawet korzystając z ZF można napisać coś bardzo kiepskiego, dlatego lepiej korzystać np. Symfony gdzie dla podstawowego użycia, na prawdę nie wiele trzeba wiedzieć.
Landon
No to się mylicie. Jak dla mnie nie tak trodno zrozumieć ZF troche czytam i powoli wychodzi (bez manula nie było by szans) tongue.gif
Sedziwoj
Cytat(Landon @ 24.05.2008, 15:06:00 ) *
No to się mylicie. Jak dla mnie nie tak trodno zrozumieć ZF troche czytam i powoli wychodzi (bez manula nie było by szans) tongue.gif


Mylą się tylko Ci co są zbyt pewni siebie.
Landon
No ale lepiej uczyć się na swoich błędach niż wogóle... blinksmiley.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.