Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Klasa][PHP7] Prosta klasa do kilku operacji bitowych., "Dwuwartościowe przechowywanie"
KsaR
post
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
 
Start new topic
Odpowiedzi
com
post
Post #2





Grupa: Zarejestrowani
Postów: 3 034
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 (IMG:style_emoticons/default/wink.gif)

Nie ucz sie złych praktyk (IMG:style_emoticons/default/smile.gif)

bo Yoda było kiedyś popularne bo ludzie nie rozróżniali = i == (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
KsaR
post
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, 21:06:25) *
no to czas na zmiany, nie stosuje się nazw zastrzeżonych, ECHO nie zdziała bo to to samo co echo (IMG:style_emoticons/default/wink.gif)

Nie ucz sie złych praktyk (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/tongue.gif)

Ten post edytował KsaR 21.02.2016, 21:14:39
Go to the top of the page
+Quote Post

Posty w temacie
- KsaR   [Klasa][PHP7] Prosta klasa do kilku operacji bitowych.   21.02.2016, 17:40:15
- - com   _BAN_ czemu taka konwencja? I raczej już nazewni...   21.02.2016, 18:14:13
|- - KsaR   Cytat(com @ 21.02.2016, 18:14:13 ) _B...   21.02.2016, 20:14:05
- - Pyton_000   const: https://github.com/php-fig/fig-standards/bl...   21.02.2016, 20:49:18
|- - KsaR   Cytat(Pyton_000 @ 21.02.2016, 20:49:1...   21.02.2016, 20:59:28
- - com   problem z czym?   21.02.2016, 20:50:00
- - com   no formę jego zapisu trzeba zmienić. CytatMikroop...   21.02.2016, 21:02:26
|- - KsaR   Cytat(com @ 21.02.2016, 21:02:26 ) no...   21.02.2016, 21:05:07
- - com   no to czas na zmiany, nie stosuje się nazw zastrze...   21.02.2016, 21:07:01
|- - KsaR   Cytat(com @ 21.02.2016, 21:06:25) no ...   21.02.2016, 21:10:36
- - com   https://www.ibuildings.nl/blog/2016/01/prog...cing...   21.02.2016, 21:29:08
|- - KsaR   Cytat(com @ 21.02.2016, 21:29:08 ) ht...   21.02.2016, 21:33:42
- - com   to złego, że trzeba się zastanawiać nad takim kode...   21.02.2016, 21:35:01
- - KsaR   To cza by więcej Arabów zatrudnić, hehe   21.02.2016, 21:37:22
- - com   Tobie może się tak lepiej czytać ale ktoś kto odzi...   21.02.2016, 21:38:51
- - lukaskolista   Co do yoda conditions - jest ok, używa się, przykł...   27.02.2016, 21:33:53
- - Pyton_000   @lukaskolista zobacz z którego roku są te commity ...   27.02.2016, 21:39:08
- - com   lukaskolista Yoda pojawia się w rożnych miejscach...   28.02.2016, 14:44:49
- - lukaskolista   https://github.com/symfony/symfony/blob/mas...Yaml...   28.02.2016, 16:17:01
- - com   co z tego ze commit 5 h temu, kod się utrzymuje la...   28.02.2016, 16:40:13


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: 17.10.2025 - 19:16