Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> Pisze swój framework
Landon
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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

Ten post edytował Landon 14.05.2008, 22:40:37


--------------------
Go to the top of the page
+Quote Post
empathon
post
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 31
Dołączył: 13.11.2006
Skąd: się znamy?

Ostrzeżenie: (0%)
-----


Gdybyś przejrzał dokładniej manual zauważyłbyś autoload.


--------------------
Goldenline: Łukasz Rodziewicz
Go to the top of the page
+Quote Post
Landon
post
Post #3





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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...


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
mike
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
.radex
post
Post #6





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

Ostrzeżenie: (0%)
-----


Karnel? A nie kernel przypadkiem?

Karnel (n=m) to jest w snickersie.


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
Landon
post
Post #7





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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

Ten post edytował Landon 14.05.2008, 20:17:29


--------------------
Go to the top of the page
+Quote Post
jarek_bolo
post
Post #8





Grupa: Zarejestrowani
Postów: 149
Pomógł: 12
Dołączył: 3.03.2008
Skąd: łódzkie

Ostrzeżenie: (0%)
-----


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.


--------------------
"Jeden człowiek nie zmieni świata, ale jeden człowiek może przekazać informację która zmieni świat." - David Icke
| PAMIĘTAJ, JESTEŚ POLAKIEM !!! |
Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!!
Go to the top of the page
+Quote Post
Landon
post
Post #9





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował Landon 14.05.2008, 20:24:30


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Landon
post
Post #11





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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

Ten post edytował Landon 14.05.2008, 20:27:44


--------------------
Go to the top of the page
+Quote Post
Strzałek
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Landon
post
Post #13





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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ł :?

Ten post edytował Landon 14.05.2008, 20:37:12


--------------------
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #14





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Landon
post
Post #15





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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 ....

Ten post edytował Landon 15.05.2008, 20:11:57


--------------------
Go to the top of the page
+Quote Post
Whisller
post
Post #16





Grupa: Zarejestrowani
Postów: 77
Pomógł: 5
Dołączył: 29.03.2006
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Agavi oraz Symfony i moja skromna rada, zostaw w spokoju pisanie swojego frameworka.


--------------------
Blog | Strona www | wicia.pl
Go to the top of the page
+Quote Post
Landon
post
Post #17





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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...


--------------------
Go to the top of the page
+Quote Post
Strzałek
post
Post #18





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Landon
post
Post #19





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


No tak zapomniałem wywalić smile.gif.. Później poprawiłem ale nie wklejeniem poprawki...


--------------------
Go to the top of the page
+Quote Post
cbagov
post
Post #20





Grupa: Zarejestrowani
Postów: 181
Pomógł: 18
Dołączył: 19.04.2008

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 07:50