Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Klasa][PHP7] Prosta klasa do kilku operacji bitowych., "Dwuwartościowe przechowywanie"
KsaR
post 21.02.2016, 17:40:15
Post #1





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

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


class.Bits.php
  1. <?php
  2. abstract class Bits
  3. {
  4. protected $bits = 0;
  5.  
  6. public function __construct($bits = NULL)
  7. {
  8. if ($bits !== NULL) $this->bits = $bits;
  9. }
  10.  
  11. public function has(int $bit): bool
  12. {
  13. return ($this->bits & $bit) === $bit;
  14. }
  15.  
  16. public function set(int $bit, bool $bool)
  17. {
  18. if ($bool)
  19. $this->bits |= $bit;
  20. else
  21. $this->bits &=~ $bit;
  22.  
  23. return $this;
  24. }
  25.  
  26. public function get(): int
  27. {
  28. return $this->bits;
  29. }
  30. }


class.Flags.php
  1. class Flags extends Bits
  2. {
  3. const _BAN_ = 1;
  4. const _ONLINE_ = 2;
  5. const _GLOBALS_ = 4;
  6. const _ECHO_ = 8;
  7. const _SPY_ = 16;
  8. }


Klasa jak widać prosta, zainspirowałem się do zrobienia jej po artykule nospor-a.
(Dwuwartościowe przechowywanie)

Oceniać można wszystko (nazewnictwo, co można by lepiej) itp.

Przykłady użycia:

Rejestracja Użytkownika
  1. $flags = new Flags;
  2. $flags->set(Flags::_GLOBALS_, true);
  3. # ... Potem przy insercie do bazy użyjemy dla pola `options`
  4. $flags->get();


Gdy już mamy zarejestrowanego a chcemy np. Zaktualizować status online/spy:
  1. $flags = new Flags($user['options']);
  2. $flags
  3. ->set(Flags::_ONLINE_, true)
  4. ->set(Flags::_SPY_, true);
  5. # przy update do bazy....
  6. $flags->get();


Aby sprawdzić czy uzytkownik jest zalogowany:
  1. $flags = new Flags($user['options']);
  2. #...
  3. if ($flags->has(Flags::_ONLINE_))
  4. {
  5. # online
  6. }
  7. else
  8. {
  9. # offline
  10. }


Oczywiście klasę Flags trzeba dopasować pod swoje wymagania.
@edit. Zmiana nazw klas na duże.

Ten post edytował KsaR 21.02.2016, 21:05:37


--------------------
Go to the top of the page
+Quote Post
com
post 21.02.2016, 18:14:13
Post #2





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

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


_BAN_ czemu taka konwencja?

I raczej już nazewnictwa plików tak klas się nie stosuje, a klasa z dużej litery.
Go to the top of the page
+Quote Post
KsaR
post 21.02.2016, 20:14:05
Post #3





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

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


Cytat(com @ 21.02.2016, 18:14:13 ) *
_BAN_ czemu taka konwencja?

I raczej już nazewnictwa plików tak klas się nie stosuje, a klasa z dużej litery.

Przy echo problem był (w edytorze lub w php już nie pamiętam) dlatego na szybko przedrostki dodałem na ewentualność) - co do nazw, dzięki, zaraz pozmieniam tongue.gif


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 21.02.2016, 20:49:18
Post #4





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

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


const: https://github.com/php-fig/fig-standards/bl...md#41-constants
- Klasę Bits dałbym abstract, bo nie ma sensu robienie z niej instancji
- if (NULL !== $bits) - Yoda Conditions? Nie używa się wink.gif
- metoda isset zmienił bym na has

Warto dodać że min. wersja PHP 7.x smile.gif

Poza tym ok, nie ma za bardzo więcej co oceniać bo i nie wiele jest kodu smile.gif
Go to the top of the page
+Quote Post
com
post 21.02.2016, 20:50:00
Post #5





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

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


problem z czym?
Go to the top of the page
+Quote Post
KsaR
post 21.02.2016, 20:59:28
Post #6





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

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


Cytat(Pyton_000 @ 21.02.2016, 20:49:18 ) *
const: https://github.com/php-fig/fig-standards/bl...md#41-constants
- Klasę Bits dałbym abstract, bo nie ma sensu robienie z niej instancji
- if (NULL !== $bits) - Yoda Conditions? Nie używa się wink.gif
- metoda isset zmienił bym na has

Warto dodać że min. wersja PHP 7.x smile.gif

Poza tym ok, nie ma za bardzo więcej co oceniać bo i nie wiele jest kodu smile.gif

Co do constant - nie rozumiem, co trzeba zmienić? tongue.gif

Bits było na początku abstract ale na potrzeby forum skasowałem bo myślałem że źle ;p

Yoda Conditions - ... Mikrooptymalizacja, zawsze tak robię, problemów z tym nigdy nie miałem..
Jak doczytałem problemy mogą byc tylko w np. ''=$x; jednak tak nigdy nie robiłem.
Ps. PHP pierw sprawdza typ dlatego pierw typ potem ===.
Nie wiem dlaczego to złe w moim przypadku, jakieś wyjaśnienie?

Co do php7, jest w tytule [PHP7] od samego początku tongue.gif
A klasa mała bo tylko do "wartości dwustanowych"

Zaraz dodam abstract i zmienie isset na has, dzięki wink.gif
--
@com, chyba składnię mi źle podswietlało.
A innej nazwy odchodzącej od echo nie mogłem zastosować bo tak mam w bazie danych,
I w moim czacie (na gg) oznacza to czy ma odsylac wlasna wiadomosc wyslana na czacie czy nie tongue.gif

Ten post edytował KsaR 21.02.2016, 21:04:16


--------------------
Go to the top of the page
+Quote Post
com
post 21.02.2016, 21:02:26
Post #7





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

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


no formę jego zapisu trzeba zmienić.

Cytat
Mikrooptymalizacja

Faktycznie to dużo zmienia wink.gif
Go to the top of the page
+Quote Post
KsaR
post 21.02.2016, 21:05:07
Post #8





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

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


Cytat(com @ 21.02.2016, 21:02:26 ) *
no formę jego zapisu trzeba zmienić.


Faktycznie to dużo zmienia wink.gif

Ok, zaraz poprawie biggrin.gif mi się zawsze w oczy poprostu rzuca jak jest na odwrót tongue.gif
WordPress też tak ma;;;


--------------------
Go to the top of the page
+Quote Post
com
post 21.02.2016, 21:07:01
Post #9





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

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


no to czas na zmiany, nie stosuje się nazw zastrzeżonych, ECHO nie zdziała bo to to samo co echo wink.gif

Nie ucz sie złych praktyk smile.gif

bo Yoda było kiedyś popularne bo ludzie nie rozróżniali = i == tongue.gif
Go to the top of the page
+Quote Post
KsaR
post 21.02.2016, 21:10:36
Post #10





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

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


Cytat(com @ 21.02.2016, 21:06:25) *
no to czas na zmiany, nie stosuje się nazw zastrzeżonych, ECHO nie zdziała bo to to samo co echo wink.gif

Nie ucz sie złych praktyk smile.gif

A mógłbyś jeszcze objaśnić czemu to złe? Bo nadal nic nie wiem, a do-googlować nic nie mogę.
Cytat(https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/)
Yoda Conditions #
  1. if ( true == $the_force ) {
  2. $victorious = you_will( $be );
  3. }

When doing logical comparisons, always put the variable on the right side, constants or literals on the left.

In the above example, if you omit an equals sign (admit it, it happens even to the most seasoned of us), you?ll get a parse error, because you can?t assign to a constant like true. If the statement were the other way around ( $the_force = true ), the assignment would be perfectly valid, returning 1, causing the if statement to evaluate to true, and you could be chasing that bug for a while.

A little bizarre, it is, to read. Get used to it, you will.

This applies to ==, !=, ===, and !==. Yoda conditions for <, >, <= or >= are significantly more difficult to read and are best avoided.

Edit. No to nie rozróżniali, a coś wiekszego przeciw temu? Tu z wordpressa jak widac tylko do operatorów wiekszosci/mniejszosci się doczepili tongue.gif

Ten post edytował KsaR 21.02.2016, 21:14:39


--------------------
Go to the top of the page
+Quote Post
com
post 21.02.2016, 21:29:08
Post #11





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

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


https://www.ibuildings.nl/blog/2016/01/prog...cing-complexity

Napisałem Ci poco się Yoda stosuje, to jest ominiecie problemów słabych programistów którzy popełniają trywialne błędy, zaciemniając czytelność kodu wink.gif

A wp to nie jest dobrym przykładem niczego smile.gif

A tak wgl to nie do tego był mój komentarz a do nazw stałych w tym co zacytowałeś smile.gif
Go to the top of the page
+Quote Post
KsaR
post 21.02.2016, 21:33:42
Post #12





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

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


Cytat(com @ 21.02.2016, 21:29:08 ) *
https://www.ibuildings.nl/blog/2016/01/prog...cing-complexity

Napisałem Ci poco się Yoda stosuje, to jest ominiecie problemów słabych programistów którzy popełniają trywialne błędy, zaciemniając czytelność kodu wink.gif

A wp to nie jest dobrym przykładem niczego smile.gif

A tak wgl to nie do tego był mój komentarz a do nazw stałych w tym co zacytowałeś smile.gif

No juz poprawione, ja nigdy nie mialem problemow z = ale znam osoby co zaczynaja z php (aktualnie) i mają tongue.gif ja tak jak pisalem mikro/makro-optymalizacja... Dla mnie tak czytelniej
Gdzieś o tym było na potwierdzenie ale nie chce mi się googlowac - ale bylo ze php pierw sprawdza typ zmiennej (tak jak w ===) i jesli typ jest pierwszy to by jeszcze lepiej, ale skoro zle to zle, więc nie bede uzywal juz biggrin.gif

Co do komentarza to dodalem w odpowiedzi na "problem z czym?"

Jednak oznaczylem "@com" - i tak 2 postow sie nie da pod rzad bo doda do 1 tongue.gif


--------------------
Go to the top of the page
+Quote Post
com
post 21.02.2016, 21:35:01
Post #13





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

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


to złego, że trzeba się zastanawiać nad takim kodem, czytamy od lewej do prawej wink.gif a ludzie, którzy pracują z tym strasznym kodem wp, często popełniali błędy bo go się źle czyta, no to ktoś wpadł na pomysł użyjmy yoda to nam się kody wysypie to poprawimy błąd smile.gif
Go to the top of the page
+Quote Post
KsaR
post 21.02.2016, 21:37:22
Post #14





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

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


To cza by więcej Arabów zatrudnić, hehe biggrin.gif
Go to the top of the page
+Quote Post
com
post 21.02.2016, 21:38:51
Post #15





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

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


Tobie może się tak lepiej czytać ale ktoś kto odziedziczy kod może już nie być z tego zadowolony, na tym poziomie ta optymalizacja nie ma znaczenia wink.gif a typ sprawdzany jest tylko przy ===, po to się stosuje 3 a nie 2 = wink.gif

Ten post edytował com 21.02.2016, 21:39:41
Go to the top of the page
+Quote Post
lukaskolista
post 27.02.2016, 21:33:53
Post #16





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


Co do yoda conditions - jest ok, używa się, przykład z najnowszego symfony:
https://github.com/symfony/symfony/blob/mas.../Constraint.php
Go to the top of the page
+Quote Post
Pyton_000
post 27.02.2016, 21:39:08
Post #17





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

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


@lukaskolista zobacz z którego roku są te commity wink.gif 2014, 2010
Go to the top of the page
+Quote Post
com
post 28.02.2016, 14:44:49
Post #18





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

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


lukaskolista

Yoda pojawia się w rożnych miejscach, ale nie znaczy, że to jest zalecana praktyka.

https://github.com/zendframework/zend-diact...tTrait.php#L110 tu tez ja znajdziesz, ale to jest kwestia przyzwyczajenia konkretnego programisty który to stworzył, nie dobrych praktyk wink.gif
Go to the top of the page
+Quote Post
lukaskolista
post 28.02.2016, 16:17:01
Post #19





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


https://github.com/symfony/symfony/blob/mas...Yaml/Inline.php - commit sprzed 5 godzin.

Dodatkowo w żadnym PSR nic o tym nie ma, jakoś też w google nic nie mogę znaleźć na temat tego, żeby była to dobra czy zła praktyka.
Go to the top of the page
+Quote Post
com
post 28.02.2016, 16:40:13
Post #20





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

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


co z tego ze commit 5 h temu, kod się utrzymuje latami przecież, dałem linka do strony gdzie jest napisane na bazie książek uncle boba smile.gif
Go to the top of the page
+Quote Post

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 - 15:58