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 9.06.2016, 11:24:00
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 9.06.2016, 11:57:50
Post #22





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




nie
return false
a
return null



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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
KsaR
post 9.06.2016, 12:10:12
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 9.06.2016, 12:17:45
Post #24





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
KsaR
post 9.06.2016, 12:23:47
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. if ($useGZIP questionmark.gif false)
  2. # ...
  3. self::$extension = $ext 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 9.06.2016, 12:23:51
Post #26





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

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


Przepraszam, że się wtrącę 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


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
nospor
post 9.06.2016, 12:28:18
Post #27





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
KsaR
post 9.06.2016, 12:43:59
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ę 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 9.06.2016, 12:49:03
Post #29





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
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 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 wink.gif


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
KsaR
post 9.06.2016, 13:01:51
Post #30





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

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


Ok. Poprawiłem biggrin.gif


--------------------
Go to the top of the page
+Quote Post
viking
post 9.06.2016, 13:15:41
Post #31





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
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 9.06.2016, 13:36:21
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 wink.gif

Użyć setterów zamiast parametrów
Go to the top of the page
+Quote Post
nospor
post 9.06.2016, 14:44:36
Post #33





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 9.06.2016, 14:52:01
Post #34





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
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 9.06.2016, 20:12:53
Post #35





Grupa: Zarejestrowani
Postów: 3 033
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 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 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 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 9.06.2016, 20:48:00
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 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 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. 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ł. tongue.gif


--------------------
Go to the top of the page
+Quote Post
com
post 9.06.2016, 21:17:49
Post #37





Grupa: Zarejestrowani
Postów: 3 033
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 smile.gif

Ale mój komunikat był inny wink.gif a jak tak chcesz to wydzieliłbym path i tak jak mówiłem zrobił z tego VO 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 smile.gif

Ten post edytował com 9.06.2016, 21:37:35
Go to the top of the page
+Quote Post
KsaR
post 9.06.2016, 22:29:02
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? 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 9.06.2016, 22:43:12
Post #39





Grupa: Zarejestrowani
Postów: 3 033
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 10.06.2016, 06:42:04
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? smile.gif

Co do serializacji albo musisz serializować wszystko albo nic 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

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 Wersja Lo-Fi Aktualny czas: 25.04.2024 - 09:14