Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V  < 1 2  
Reply to this topicStart new topic
> Autorski framework, czy udostępnić?
!*!
post
Post #21





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat(matrik @ 9.02.2015, 11:21:08 ) *
dlatego nie ma wzorca projektowego MVC, lecz autorski model CCV (Controller - Component - View) więc co o tym sądzicie?


Jak coś nie ma MVC(lub pochodnych), to jest do dupy. I co to jest to CCV i czym to się różni od MVP czy MVA?
Go to the top of the page
+Quote Post
by_ikar
post
Post #22





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Wszystko co jest za throw nie zostanie wykonane, tak samo jak wszystko co jest za exit, die, return i podobnymi, więc ten return false tam jest zbędny. is_file zwraca tylko czy plik istnieje, a plik może istnieć ale możesz nie mieć do niego uprawnień. Warunek:

Kod
if(self::$baseClass[$strtolower])
{
    // some code
}


będzie wyświetlać notice jeżeli włączysz raportowanie błędów na E_ALL. require_once jest zbędny (i wolniejszy) jeżeli wcześniej i tak sprawdzasz czy klasa już istnieje.

Kiepsko trochę, sporo błędów logicznych. Nie zrozum mnie źle, ale śmieszne trochę jest kiedy mówisz o super optymalizacji, jednocześnie używając wyrażenia regularnego do wyszukiwania "stałego" ciągu. O czym nawet jest napisane w dokumentacji preg_match, że jak masz go użyć do wyszukania ciągu w podciągu, użyj strpos lub strstr. Niby to nie jest jakaś kolosalna różnica, ale to już widać na pierwszy rzut oka że nie bardzo wiesz jak dane funkcje/elementy języka działają. Tak samo mnie zastanawia, bo napisałeś że jest bezpieczny jak ktoś nie korzysta bezpośrednio z post, get etc. Czyli co, ty te dane traktujesz htmlspecialchar w jakiejś pętli, czy jak?

Konkluzja jest taka, że twój "framework" jest szybszy od innych, bo nie ma wielu innych ficzerów. Jakbyś miał z użyciem 2 frameworków napisać 2 takie same aplikacje, i użył byś swojego fw, jak i powiedzmy laravela; to jest wysokie prawdopodobieństwo że w obu przypadkach te prędkości czy użycie danych będą bardzo zbliżone.

Ten post edytował by_ikar 9.02.2015, 15:53:01
Go to the top of the page
+Quote Post
Pyton_000
post
Post #23





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


@up Ba, ten kod który został pokazany można by było spokojnie odchudzić do ok 35 linijek i to nie dla tego że wszystko w jednej, ale wywalając część i zamieniając bardziej odpowiednimi elementami.

Poza tym te 2 metody autoloadu są podobne. Zmienia się w sumie na dobrą sprawę sprawdzenie czy klasa jest smarty i zmiana ścieżki.
Razi mnie też użycie referencji. Blee. Nie lubimy tego bo potem kwiatki wychodzą.

  1. $object =& $class->newInstance();
  2. self::$baseClass[$strtolower] =& $object;
  3. return $object;

Na prawdę nie uważasz że to jest bez sensu?
Go to the top of the page
+Quote Post
vokiel
post
Post #24





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Ok, skoro jest kod do review, to zrobię pobieżny (uwagi w komentarzach)
  1. <? // krótka notacja tagów otwierających może przysporzyć problemów na serwerach bez ustawionej flagi short_open_tag w php.ini
  2. class woBase{
  3. static public $baseClass = array();
  4.  
  5. function run(){ // brak określenia widoczności metody
  6. return self::getClass('Application')->start();
  7. }
  8.  
  9. static function getClass($name,$run=true){ // po co te $run?
  10. $strtolower = strtolower($name); // nazywanie zmiennych nazwami funkcji to nie jest dobra praktyka
  11. //echo WOPATCH.'core/'.$name.'.php<br />';
  12. if(self::$baseClass[$strtolower]){ // NOTICE przy braku elementu w tablicy, tablica jest public, to co jeśli ktoś podmieni obiekt klasy $name na inny?
  13. //echo '- '.$name.'<br />';
  14. return self::$baseClass[$strtolower];
  15. }else{
  16. //echo '+ '.$name.'<br />';
  17. if(!class_exists($strtolower,false)){
  18. if(is_file(WOPATCH.'core/'.$name.'.php')){
  19. require WOPATCH.'core/'.$name.'.php';
  20. }else{
  21. throw new ErrorHandler('getClass - Nie odnaleziono pliku klasy o nazwie '.$name); // ErrorHandler - chyba raczej Exception lub WoException, handler byłby tym co przechwyci wyjątek
  22. return false; // zbędne, nie wykona się
  23. }
  24. }
  25. $class = new ReflectionClass($strtolower); // jaki zysk z zastosowania Reflection? Czemu nie łapiesz wyjątku ReflectionException?
  26. $object =& $class->newInstance(); // a co jeśli nowa klasa wymaga przekazania parametrów do konstruktora? po co referencja @Pyton_000
  27. self::$baseClass[$strtolower] =& $object; // po co znów referencja @Pyton_000
  28. return $object;
  29. // skoro nie korzystasz z przekazywania zmiennych do konstruktora, z ReflectionException, to wystarczy takie rozwiązanie
  30. return self::$baseClass[$strtolower] = new $strtolower();
  31. }
  32. }
  33.  
  34.  
  35. // w zasadzie autoload od getClass różni się tylko dwiema kwestiami: sprawdzaniem czy jest to smarty oraz tym, że getClass tworzy nową instancję obiektu, duża duplikacja kodu jak na działanie w kierunku optymalizacji. Może jednak pójdź w stronę $run=true i połącz zduplikowany kod.
  36. public static function autoload($name){
  37. $strtolower = strtolower($name);
  38. $dir = WOPATCH.'core/'.$name.'.php'; // $dir to raczej $file, mocno mylące
  39. if(preg_match('/smarty_/',$strtolower)){ // strpos lub strstr @by_ikar
  40. $dir = WOPATCH.'core/Smarty/sysplugins/'.$strtolower.'.php'; // znów $dir wskazujący na plik
  41. }
  42. if(!class_exists($name,false)){
  43. if(is_file($dir)){ // c.d. nieścisłości, wiem, że to tylko nazwa zmiennej, jednak za jakiś czas takie nieścisłości mogą spowodować, że głupiego błędu będziesz szukał dużo dłużej
  44. require_once $dir;
  45. return true;
  46. }else{
  47. throw new ErrorHandler(get_class($this).' - Not found class '.$name); // Exception nie ErrorHandler
  48. return false; // nie wykona się
  49. }
  50. }
  51. }
  52. }
  53. spl_autoload_register(array('woBase','autoload'));


Ten post edytował vokiel 9.02.2015, 21:17:42
Go to the top of the page
+Quote Post
solificati
post
Post #25





Grupa: Zarejestrowani
Postów: 26
Pomógł: 10
Dołączył: 17.03.2012

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


Cytat(matrik @ 9.02.2015, 11:21:08 ) *
Witajcie
Chciałbym udostępnić autorski system framework, który teoretycznie (hmm, nawet praktycznie) kładzie inne systemy.

Minimum benchmarków: https://github.com/TechEmpower/FrameworkBenchmarks
Możesz zrobić pull requesta ze swoim frameworkiem.
Go to the top of the page
+Quote Post
Neymar11
post
Post #26





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 20.02.2015
Skąd: localhost

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


Cytat(matrik @ 9.02.2015, 11:21:08 ) *
CodeIgniter: [0.011924028396606] 1 mb
Yii: [0.050626039505005] 5 mb
Autorski: [0.005169153213501] 768 kb


Ja też tak mogę mówić:

O a ja robiłem testy na surówkach dwóch frameworków bez połączenia z bazą danych na "Hello world":

CodeIgniter: [0.011924028396606] 1 mb
Yii: [0.050626039505005] 5 mb
Autorski matrika: [0.005169153213501] 768 kb
Autorski Neymara11: [0.000000000000001] 1 b

No bo ja mam najlepsiejszy framework i nie mam tam zbędnych pierdouff co by tylko spowalniały ... [bla bla] [bla bla]
Daj dowód, udostępnij frameworka no i już. Każdy sobie oblooka skrytykuje i wszyscy będą "happy" (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
peter13135
post
Post #27





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Skoro kładziesz na lekkość, to po co w Twoim FW smarty ? PHP sam w sobie jest systemem szablonów.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 16.01.2026 - 00:09