Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> [Klasa][PHP7] Cache
KsaR
post
Post #1





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Źródło:
https://github.com/KsaR99/php-cache

Plik: class.Cache.php, zawiera klasę.
Plik: cache.php, to przykładowe zastosowanie.

Klas cache są miliony jednak chciałem stworzyć swoją własną, prostą. (IMG:style_emoticons/default/biggrin.gif)

Do oceny:
  • Użyteczność
  • Co można poprawić żeby sobie/innym życia nie skomplikować
  • Jakość kodu (ciągle uczę się nią polepszać)


Zastanawiam się nad metodą do kasacji cache,
Jednak cache zazwyczaj się nie kasuje a podmienia.
Warto dodać? Jeśli tak to prosił bym też o przykład - po co.

Wszelkie uwagi mile widziane. (IMG:style_emoticons/default/tongue.gif)

Ten post edytował KsaR 8.06.2016, 17:51:54
Go to the top of the page
+Quote Post
kapslokk
post
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Przydała by się możliwość cachowania innych typów danych. ;]
Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





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

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


Kompresja gz. Do wywalenia. Jedynie spowalnia całość.

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





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

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


Więcej dokumentacji, niż właściwego kodu (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
KsaR
post
Post #5





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Cytat(kapslokk @ 8.06.2016, 19:19:32 ) *
Przydała by się możliwość cachowania innych typów danych. ;]

Postaram się dodać. (IMG:style_emoticons/default/tongue.gif)

Cytat(Pyton_000 @ 8.06.2016, 19:33:23 ) *
Kompresja gz. Do wywalenia. Jedynie spowalnia całość.

Domyślnie jest wyłączona więc nie powinno spowalniać. (Chyba że w ms).

Cytat(mrc @ 8.06.2016, 19:53:58 ) *
Więcej dokumentacji, niż właściwego kodu (IMG:style_emoticons/default/biggrin.gif)

Przecież jest napisane "... prostą", ważne że robi swoje. (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
mrc
post
Post #6





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

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


Co do phpdoc dla metod: całkiem niepotrzebny jest dla parametrów, dla których podajesz typ w kodzie. Zaciemnia to kod, dorzuca dodatkowy szum informacyjny, może prowadzić do problemów przy refactoringu - przy zmianie zachowania funkcji możesz zapomnieć o zmianie komentarza, który później będzie wprowadzał w błąd.


-- Edit --

"if you want use compression mode"

vs

"if you want to use compression mode".

-- Edit --

Do tego throw Exception() przy użyciu namespace może wyrzucać błąd nieznalezienia klasy. Rzucaj \Exception albo bardziej oczywiste wyjątki jak \InvalidArgumentException.

Ten post edytował mrc 8.06.2016, 19:58:54
Go to the top of the page
+Quote Post
com
post
Post #7





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Dobre IDE podpowie, że typ się zmienił, a Storm używa phpDoca do podpowiadania, tylko mnie rażą te nazwy typów UpperCasem.

No ale skoro może spowalniać to poco wgl ja trzymać jako opcje?

Cytat
Do tego throw Exception() przy użyciu namespace może wyrzucać błąd nieznalezienia klasy.


Nawet nie może tylko wyrzuci (IMG:style_emoticons/default/smile.gif)

komentarze to nie
  1. /**
  2. *
  3. *
  4. */

tylko
  1. /**
  2.  *
  3.  *
  4.  */


No i czemu taka archaiczna konwencja nazewnictwa?
Gdzie PSR

Nazywaj jakoś sensownie te commity (IMG:style_emoticons/default/wink.gif)

Z ścieżki i innych zrobiłbym VO, bo czemu klasa cache ma za to odpowiadać, czy one są poprawne, jak to nie jej rola.

I poco ustawiać wartości domyślne, parametrom którym wymuszasz ich zmianę?

Zaraz, ja muszę stworzyć sobie plik żeby do niego pisać?

poza tym else to zło, naprawdę nie można było

  1. if (!isset($path) || !file_exists($path)) {
  2. throw new \Exception('bla bla');
  3. }
  4.  
  5. $this->path = $path;


Btw treść commita to nie komentarz, bo wpisujesz tam to co ma znaczenie i utrudniasz sobie i innym czytanie commitów (IMG:style_emoticons/default/wink.gif)

No i nazywaj te parametry tak żeby mówiły co robią, a nie np $compress - co sugeruje że coś jest skompresowane a nie wskazuje na flage itp

Skoro używasz dobrodziejstw php 7 to poco sprawdzać isset($compress) && $compress (IMG:style_emoticons/default/questionmark.gif) bool to zawsze bool

zrób sobie jakaś metodę do budowania właściwej ścieżki, bo tak ciężko to testować/refaktorwać potem

Zrobiłem Ci pull requesta, bo za dużo tego było (IMG:style_emoticons/default/wink.gif)

Ten post edytował com 8.06.2016, 20:58:01
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





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

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


Skoro mamy już $extension i $isCompressed to warto by było nadać im jakiś default. Compressed na false, a ext. nie wiem może ".dat"
Go to the top of the page
+Quote Post
com
post
Post #9





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Ok uwzględnię, zastanawiałem się nad tym (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
KsaR
post
Post #10





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Cytat(com @ 9.06.2016, 00:22:44 ) *
(...), tylko mnie rażą te nazwy typów UpperCasem.

No ale skoro może spowalniać to poco wgl ja trzymać jako opcje?

(...)No i czemu taka archaiczna konwencja nazewnictwa?
Gdzie PSR

(...)Zaraz, ja muszę stworzyć sobie plik żeby do niego pisać?

(...)No i nazywaj te parametry tak żeby mówiły co robią, a nie np $compress - co sugeruje że coś jest skompresowane a nie wskazuje na flage itp

(...)Zrobiłem Ci pull requesta, bo za dużo tego było (IMG:style_emoticons/default/wink.gif)

Dzięki, wiele zmian dodałem w ostatnich 2 commitach.
Nie znalazłem nigdzie w PSR czy używać małymi czy dużymi te nazwy typów (było tylko o parametrach).
Jeśli ktoś poda konkretny link do PSR gdzie pisze że trzeba małymi to poprawie,
Póki co tak wg. mnie lepiej (typy z dużych, parametry z małych).

Co do opcji, jak pisałem domyślnie jest wyłączone.
Takie spowolnienie to jedynie użycie ternary operator - czyli żadne.
A tak się przydaje gzip do większych plików.

Co do tworzenia pliku -
metoda set() tworzy/aktualizuje, validate jedynie sprawdza czy plik istnieję i jest aktualny...
Więc nie rozumiem pytania.

Zmieniłem z $compress na $useGZIP ($isCompress mi nie odpowiadało, "jestKompresja" vs "użyjGZIP")....

JW. Jednak przeniosłem twoją metodę oraz pomysł na statyczne zmienne.
+ W poprzednim commicie zgodnie z komentarzem mrc skasowalem z komentarzy te typy które są zadeklarowane w metodzie - ty je znów dodałeś.
___________
Co do ".dat", zostaje przy ".txt" - jako ze to pliki tekstowe.
Jednak zmienilem ze rozszerzenie bedzie ".gz" dla plików skompresowanych niezależnie od tego co się poda w konstruktorze.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #11





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

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


http://www.php-fig.org/psr/psr-2/#2-5-keyw...true-false-null
Go to the top of the page
+Quote Post
KsaR
post
Post #12





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Cytat(Pyton_000 @ 9.06.2016, 11:19:35 ) *

True false null...
Chodzi tu o dosłowne zastosowanie typu.

$var = null;

Itp.
Nie jest napisane o PHP7 oraz wymuszonych typach metod/funkcji...
A w końcu w php nie ma czegoś takiego jak:
$var = string;
$var = int;...

Ten post edytował KsaR 9.06.2016, 10:27:32
Go to the top of the page
+Quote Post
Pyton_000
post
Post #13





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

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


tak ale string, int, bool to też keywordsy więc do tego bym podciągnął
Go to the top of the page
+Quote Post
kapslokk
post
Post #14





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Poza tym upper case chyba zawsze był zarezerwowany dla stałych (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
com
post
Post #15





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


https://github.com/php-fig/fig-standards/bl...-style-guide.md

Php7 jest jeszcze nie zatwierdzone ale jest ;)

To co zmieniłeś nie ma sensu, bo parametr musisz podać wiec poco nam ??
Typy maja być, bo phpdoc nie jest jeszcze do php7 przygotowany i np Storm interpretuje potem twój komentarz jako klasę. Dlatego je dodałem, jak nie dajesz wgl komentarzy to wtedy można tak pisać, ale nwm czy to ma sens.

nie było $isCompress tylko $isCompressed - jest skompresowany (IMG:style_emoticons/default/wink.gif)

Cytat
Jednak zmienilem ze rozszerzenie bedzie ".gz" dla plików skompresowanych niezależnie od tego co się poda w konstruktorze.


Może to być dla kogoś wielkim zaskoczeniem (IMG:style_emoticons/default/smile.gif)

Ten post edytował com 9.06.2016, 10:47:59
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Mnie tez porazily te STRINGi...

  1. if ($cache->valid('number', 30)) { // cache has up to 30s ?
  2. echo $cache->get('number'); // if yes, display.
  3. }

Osobiscie preferuje gdy metoda get sama sprawdza czy jest valid czy nie i gdy nie jest valid to albo zwraca null albo rzuca wyjatek

  1. $_SERVER['REQUEST_TIME']-filemtime($path)

Chyba bardziej powinienes uzywac tim() a nie czasu z $_SERVER
Go to the top of the page
+Quote Post
com
post
Post #17





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


nospor

Tylko wtedy mamy 2 odpowiedzialności (IMG:style_emoticons/default/wink.gif)

time() (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




tak, tak, time, szybko pisze bo jestem sledzony (IMG:style_emoticons/default/wink.gif)

I co z tego ze dwie? Nie popadajmy w skrajnosci. Osobiscie nie widze sprawdzania za kazdym razem czy jest valid czy nie. A co jak zapomne sprawdzic i uzyje tylko get?
Go to the top of the page
+Quote Post
com
post
Post #19





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


A i chodziło mi o konwencje nazywania plików (IMG:style_emoticons/default/wink.gif)

Owszem jest to problem, no to najwyżej dostaniesz nie spójne dane (IMG:style_emoticons/default/smile.gif)

Owszem inaczej bym to rozwiązał, żeby sprawdzał tylko raz a nie za każdym razem, ale niekoniecznie w get (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #20





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Owszem jest to problem, no to najwyżej dostaniesz nie spójne dane smile.gif
i wlasnie temu get() powinno odwalac cala robote a nie ja mam sie jeszcze martwic. Nie lubie gdy jakies durne terorie utrudniaja mi zycie (IMG:style_emoticons/default/wink.gif)


Ksar:
raz piszesz self::
raz static::

zdecyduj sie na jedno i uzywaj a nie mieszasz bo oczaplasu idzie dostac
Go to the top of the page
+Quote Post
KsaR
post
Post #21





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Co do lowercase keyword, argument z
https://github.com/php-fig/fig-standards/bl...-style-guide.md
Mnie przekonał i zmieniłem.

Co do time()... zanim dodałem na GH tak miałem jednak pomyślałem że rzadko kiedy skrypt się sekundę wykonuję lub więcej ale się zdarza więc poprawiłem.


Co do self va static, przeoczenie i poprawiłem na self - wg. Mnie lepiej żeby z glownej klasy pobieralo;

Co do valid w get. Coś zaraz poprawie. @edit - poprawiłem.

Ten post edytował KsaR 9.06.2016, 11:37:49
Go to the top of the page
+Quote Post
nospor
post
Post #22





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




nie
return false
a
return null

Go to the top of the page
+Quote Post
KsaR
post
Post #23





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Cytat(nospor @ 9.06.2016, 12:57:50 ) *
nie
return false
a
return null

Dodał byś jakieś argumenty za i przeciw?

W mojej opinii:
Null = 0 = zapelnienie pustego miejsca w matematyce. ( https://pl.m.wikipedia.org/wiki/0_(liczba) )
= "Cache nie zwróciło nic".

False = fałsz = "cache jest niepoprawne", "nieaktualne".
Go to the top of the page
+Quote Post
nospor
post
Post #24





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




funkcja set powinna zwraca true lub false w zaleznosci czy sie udalo czy nie.
W sumie w czasie wyjatkow powinna rzucac wyjatkiem gdy nie udalo

null vs false
jak slusznie zauwazyles false gdy jest blad. Moim zdaniem nieaktualny cache nie jest bledem a poprostu brakiem danych czyli null. Rownie dobrze moze tam jeszcze nic nie byc (null) jak i byc przeterminowane (rowniez null)

parametry konstruktora string $ext, bool $useGZIP powinny miec domyslna wartosc, skoro tak czy siak potem je ustawiasz na domyslne gdy sa null. dzieki temu wywolujac konstruktor nie musze na sile wstawiac nulli
Go to the top of the page
+Quote Post
KsaR
post
Post #25





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Cytat(nospor @ 9.06.2016, 13:17:45 ) *
funkcja set powinna zwraca true lub false w zaleznosci czy sie udalo czy nie.
W sumie w czasie wyjatkow powinna rzucac wyjatkiem gdy nie udalo

null vs false
jak slusznie zauwazyles false gdy jest blad. Moim zdaniem nieaktualny cache nie jest bledem a poprostu brakiem danych czyli null. Rownie dobrze moze tam jeszcze nic nie byc (null) jak i byc przeterminowane (rowniez null)

parametry konstruktora string $ext, bool $useGZIP powinny miec domyslna wartosc, skoro tak czy siak potem je ustawiasz na domyslne gdy sa null. dzieki temu wywolujac konstruktor nie musze na sile wstawiac nulli

Ok - zaraz poprawie na null.
Co do parametrów $useGZIP ma domyslnie false.
...i w konstruktorze jest:
  1. # ...
  2. self::$extension = $ext (IMG:style_emoticons/default/questionmark.gif) '.txt';

Czyli domyslnie useGZIP zostanie na false;
A $extension bedzie na '.txt' gdy się nie poda, lub ".gz" gdy się włączy kompresję.
Go to the top of the page
+Quote Post
Fred1485
post
Post #26





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


Przepraszam, że się wtrącę (IMG:style_emoticons/default/smile.gif) Dlaczego zdecydowałeś/zdecydowaliście, aby właściwości były statyczne?

Ten post edytował Fred1485 9.06.2016, 12:24:40
Go to the top of the page
+Quote Post
nospor
post
Post #27





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Co do parametrów $useGZIP ma domyslnie false.
Ja mowie o parametrach konstruktora

teraz masz:
public function __construct(string $path, string $ext, bool $useGZIP)
przez co wymuszasz na mnie ustawienie wszystkich trzech parametrow.

powinno byc:
public function __construct(string $path, string $ext='.txt', bool $useGZIP=false)

przez co nie musze ustawiac dwoch ostatnich jesli chce by byly domyslne

Cytat
Przepraszam, że się wtrącę smile.gif Dlaczego zdecydowałeś/zdecydowaliście, aby właściwości były statyczne?
Sluszna uwaga.Niczemu to tutaj nie sluzy bo i tak jest private
Go to the top of the page
+Quote Post
KsaR
post
Post #28





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Cytat(Fred1485 @ 9.06.2016, 13:23:51 ) *
Przepraszam, że się wtrącę (IMG:style_emoticons/default/smile.gif) Dlaczego zdecydowałeś/zdecydowaliście, aby właściwości były statyczne?

Co prawda private (więc w dziedziczeniu nie będą dostępne)
Ale static do tego żeby należały tylko do klasy, a do obiektu już nie...

Ten post edytował KsaR 9.06.2016, 12:46:27
Go to the top of the page
+Quote Post
nospor
post
Post #29





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Ale static do tego żeby należały tylko do klasy, a do obiektu już nie...
My wiemy do czego sluzy static i nie musisz nam tego wyjasniac (IMG:style_emoticons/default/wink.gif)

Ok, prosta sytuacja:
tworzysz dwa obiekty cache:

$cache1 = new Cache('cache/', '.cache', true);
$cache2 = new Cache('cacheinnasciezka/', '.cache', true);

a teraz robisz save w cache1
$cache1->set()

hm... ciekawe gdzie sie zapisza dane z cache1 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
KsaR
post
Post #30





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Ok. Poprawiłem (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
viking
post
Post #31





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


  1. $c = new KsaR\Components\Cache('./');
  2. $b = new stdClass;
  3. $b->a = 1;
  4. $c->set('a', $b);


Dodaj jakąś serializację i zrób tam tablice i inne czyli rzeczy które się w cache trzyma na codzień. Chyba nikt nie przechowuje samych stringów. Do tego nie informujesz czy się zapis udał czy nie. Zamieniłbym też kolejność na $path, $useGzip, $ext bo teraz jeśli chcę gzipować muszę podawać rozszerzenie które w dodatku nie będzie uwzględnione.

Ten post edytował viking 9.06.2016, 13:37:04
Go to the top of the page
+Quote Post
Pyton_000
post
Post #32





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

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


A jak chcesz zmienić ext i nie gzipować to też źle (IMG:style_emoticons/default/wink.gif)

Użyć setterów zamiast parametrów
Go to the top of the page
+Quote Post
nospor
post
Post #33





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Jeszcze taka pierda ale strasznie drazni oko:

throw new \Exception('Path:'."\r\n".$path."\r\n".'Doesn\'t exists.');
nawaliles tych apostrofow i cudzyslowiow bez sensu...

throw new \Exception("Path:\r\n $path \r\nDoesn't exists.");
prawda ze lepiej?
Poza tym nowa linia to \n w cywilizowanym swiecie. zapomnij o windowsowych nawykach. Pozatym srodka zdania nie zaczyna sie od duzej litery i poza tym nowe linie tam sa totalnie bez sensu wiec:
throw new \Exception("Path '$path' doesn't exist.");
Jesli masz does to juz nie dajesz 's' na koncu czasownika
Go to the top of the page
+Quote Post
viking
post
Post #34





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


A jak już to raczej PHP_EOL
Go to the top of the page
+Quote Post
com
post
Post #35





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Tylko że w systemie nie masz x instancji tego cache raczej, tylko jedną.

Cytat
Użyć setterów zamiast parametrów


Nie, parametry są lepsze, settery powinny zginąć. Obiekt cache to immutable, nie można zmieniać w czasie działania tego, bo można sobie narobić więcej problemów niż pożytku.
No chyba, że zrobimy tak jak w psr7 i będziemy zwracać nowy obiekt (IMG:style_emoticons/default/smile.gif)
Dlatego też zrobiłem z tego static, ale nie testowałem i co słusznie zauważył nospor, zrobił się nam singleton.


I jak już to return; null tam jest nadmiarowy (IMG:style_emoticons/default/wink.gif)

Na github twierdzisz ze jesteś za optymalizacja to czemu upierasz się nadal na te piramidę
  1. if (isset($path)) {
  2. if (!file_exists($path)) {
  3. throw new \Exception('Path:'."\r\n".$path."\r\n".'Doesn\'t exists.');
  4. }
  5. $this->path = $path;
  6. } else {
  7. throw new \Exception('Please specify path for cache.');
  8. }


KsaR

Widać brak Ci trochę podstaw, bo twojego konstruktora nie dało się wywołać inaczej niż z 3 parametrami, który w dodatku powinien być zgodny z typem wiec te (IMG:style_emoticons/default/questionmark.gif) nawet nie miało sensu. Bo nawet wstawienie nulla wyrzuca błąd typu, jak już chcesz używać php7 to wypadało by trochę się z nim zaznajomić.

Dlatego chciałem go dodać w tym pull requescie i w końcu po poście Pyton_000 je tam ustawiłem.

Ten post edytował com 9.06.2016, 20:14:41
Go to the top of the page
+Quote Post
KsaR
post
Post #36





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Cytat(com @ 9.06.2016, 21:12:53 ) *
Tylko że w systemie nie masz x instancji tego cache raczej, tylko jedną.

(...)

I jak już to return; null tam jest nadmiarowy (IMG:style_emoticons/default/wink.gif)

Na github twierdzisz ze jesteś za optymalizacja to czemu upierasz się nadal na te piramidę
(...)
KsaR

Widać brak Ci trochę podstaw, bo twojego konstruktora nie dało się wywołać inaczej niż z 3 parametrami, który w dodatku powinien być zgodny z typem wiec te (IMG:style_emoticons/default/questionmark.gif) nawet nie miało sensu. Bo nawet wstawienie nulla wyrzuca błąd typu, jak już chcesz używać php7 to wypadało by trochę się z nim zaznajomić.
(...)


Instancje mogą być różne...
$cacheMessages
$cacheNews
Da się oczywiście zrobić to 1 instancją ale po co ograniczać...
Rozdzielenie do różnych folderów to też „optymalizacja” zwłaszcza im więcej tam ląduje (np. 1+k)

Co do return; - zmienie

Jeśli chodzi o te if'y.
Ja wolę mieć 2 różne komunikaty (brak ścieżki, zła ścieżka) niż "brak lub zła ścieżka"
Takie coś to nie sądzę żeby bylo nawet makro-optymalizacją bo się założe że z 100* if...elseif będzie szybsze od 1. trim() czy explode()...
Takie coś to bardziej minifikacja. A tylko utrudni korzystnie wg. mnie (mniejsza o to - takie moje zdanie).

Co do parametrów. Podstawy mam raczej.
Pisałem wszystko na tablecie bez IDE typu "storm" tylko zwykłe podświetlanie składni które nawet błędów nie pokazuję, a w dodatku nie spałem. (IMG:style_emoticons/default/smile.gif)

___
W wolnym czasie postaram się dodać to serializowanie. Zastnawiam się jak to najlepiej zrobić.
Ale gdy dodam to i tak będzie trzeba poprawić bo obstawiam że mam średni pomysł. (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
com
post
Post #37





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Cytat
Instancje mogą być różne...
$cacheMessages
$cacheNews
Da się oczywiście zrobić to 1 instancją ale po co ograniczać...
Rozdzielenie do różnych folderów to też ?optymalizacja? zwłaszcza im więcej tam ląduje (np. 1+k)


Owszem ma to sens (IMG:style_emoticons/default/smile.gif)

Ale mój komunikat był inny (IMG:style_emoticons/default/wink.gif) a jak tak chcesz to wydzieliłbym path i tak jak mówiłem zrobił z tego VO (IMG:style_emoticons/default/smile.gif)

Nie chodzi o IDE, tylko o sam fakt iż nie ważne w jakim języku jak nie podasz wartości domyślnych to parametry trzeba podać, no a jak sprawdzasz ich typ to on musi się zgadzać, wiec nie przejdzie tam cokolwiek, jak w php5 (IMG:style_emoticons/default/smile.gif)

Ten post edytował com 9.06.2016, 21:37:35
Go to the top of the page
+Quote Post
KsaR
post
Post #38





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Ok. Dodałem tako-jako wsparcie dla tablic i obiektów.
Zmieniłem kolejność parametrów konstruktora.
W exception zmienilem "\r\n" na PHP_EOL.

Co tam jeszcze miałem?
Z tym Angielskim coś ale jak konkretnie? (IMG:style_emoticons/default/tongue.gif)
__
+++ Ponownie zapraszam do oceny, propozycji, testów itp.
__
Ps. @com, co to jest to "VO"? Bo nie rozumiem.. zarzucisz przykładem?
__
Ps2.
set() zwraca teraz to co file_put_contents().
Nie wiem czy o to wam chodziło ;

Ten post edytował KsaR 9.06.2016, 22:41:00
Go to the top of the page
+Quote Post
com
post
Post #39





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Jasne https://kacper.gunia.me/ddd-building-blocks...p-value-object/
Go to the top of the page
+Quote Post
Pyton_000
post
Post #40





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

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


Z tą piramidą chodziło o to że zamiast:

Kod
        if (isset($path)) {
            if (!file_exists($path)) {
                throw new \Exception('Path:'.PHP_EOL.$path.PHP_EOL.'Doesn\'t exists.');
            }
            $this->path = $path;
        } else {
            throw new \Exception('Please specify path for cache.');
        }


pisze się:

Kod
if(!isset($path)) {
    throw new \Exception('Please specify path for cache.');
}

if (!file_exists($path)) {
    throw new \Exception('Path:'.PHP_EOL.$path.PHP_EOL.'Doesn\'t exists.');
}

$this->path = $path;


Prawda że czytelniej? (IMG:style_emoticons/default/smile.gif)

Co do serializacji albo musisz serializować wszystko albo nic (IMG:style_emoticons/default/smile.gif)
Możesz serializować tylko obiekty ale musisz wtedy użyć regexp żeby wykryć co ma być deserializowane. WP ma fajnego regexpa na to, używałem.

Ten post edytował Pyton_000 10.06.2016, 06:52:15
Go to the top of the page
+Quote Post
com
post
Post #41





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Jeśli już bardzo chcesz to typ jako stała, nigdy 0,1 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
KsaR
post
Post #42





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Cytat(com @ 10.06.2016, 12:55:45 ) *
Jeśli już bardzo chcesz to typ jako stała, nigdy 0,1 (IMG:style_emoticons/default/wink.gif)

Pozostałość po testach (IMG:style_emoticons/default/biggrin.gif) ,
Już poprawiłem.

PPs. Co do "VO"
Czyli mam zrobić oddzielną klasę do validacji oraz zwracania ścieżki i tam zrobić coś jak w Cache "fullPath()"?
Go to the top of the page
+Quote Post
com
post
Post #43





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Ale jako parametr ma być stała przekazywana również i no ostatecznie mogło by tak też być (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
LowiczakPL
post
Post #44





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


Czy czasami nazwy stałych nie powinny być napisane drukowanymi literami?

http://php.net/manual/en/language.oop5.constants.php
Go to the top of the page
+Quote Post
com
post
Post #45





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Powinny (IMG:style_emoticons/default/smile.gif)

Zgodnie z PSR, bo php dopuszcza, bo to tylko konwencja (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
LowiczakPL
post
Post #46





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


Dodatkowo dałbym strategię dla typów kesza, co zlikwidowało by IF-y,

zamiast liczbowej nazwy typu przekazywał bym nazwę strategii.
Go to the top of the page
+Quote Post
com
post
Post #47





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Owszem można by zrobić fabrykę nawet (IMG:style_emoticons/default/wink.gif)

I nie żadnego elseif

  1. if (!isset($path)) {
  2. throw new \InvalidArgumentException('Please specify path for cache.');
  3. } elseif (!file_exists($path)) {
  4. throw new \DomainException('Path:'.PHP_EOL."„{$path}”".PHP_EOL.'Does not exists.');
  5. }


Dlaczego jesteś taki uparty, skoro Pyton_000 napisał tak
  1. if(!isset($path)) {
  2. throw new \Exception('Please specify path for cache.');
  3. }
  4.  
  5. if (!file_exists($path)) {
  6. throw new \Exception('Path:'.PHP_EOL.$path.PHP_EOL.'Doesn\'t exists.');
  7. }
  8.  
  9. $this->path = $path;


I co to wgl za „ ” są (IMG:style_emoticons/default/ohmy.gif)

pomijając to że nie stosujesz się do tego co pisał nospor apropo poprawności komunikatu (IMG:style_emoticons/default/wink.gif)

a sam path jako byt, to nie Domain (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
KsaR
post
Post #48





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Cytat(com @ 11.06.2016, 19:31:33 ) *
Owszem można by zrobić fabrykę nawet (IMG:style_emoticons/default/wink.gif)

I nie żadnego elseif

(...)

I co to wgl za „ ” są (IMG:style_emoticons/default/ohmy.gif)

pomijając to że nie stosujesz się do tego co pisał nospor apropo poprawności komunikatu (IMG:style_emoticons/default/wink.gif)

a sam path jako byt, to nie Domain (IMG:style_emoticons/default/wink.gif)

* Co do strategy, factory - nie widzę takiej potrzeby dla takiej mikro-klasy.

* Poprawie.

* Cudzysłowia. (IMG:style_emoticons/default/biggrin.gif)

* Jak mam się stosować do czegoś czego nie rozumiem ?

* Zmienie na Exception. ;d
Go to the top of the page
+Quote Post
com
post
Post #49





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


chodzi o to, że tak jest poprawnie:
throw new \Exception("Path '$path' doesn't exist.");

No albo się pisze czysty kod albo ma byle polska nie zginęła (IMG:style_emoticons/default/tongue.gif)

Nie stosował bym egzotycznych znaczków bo rożnie mogą to przeglądarki interpretować, poza tym
to tylko błąd, poco jakieś eksperymenty bo można (IMG:style_emoticons/default/smile.gif)

Co do stałych jeszcze bym się zastanowił czy ten zwrot jako jest nam potrzebny (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
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: 26.12.2025 - 07:25