Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][oop] Zmienne w klasie. Czym się różnią?
Forum PHP.pl > Forum > Przedszkole
luis2luis
Witam.

Uczę się dopiero programowania obiektowego. Już sobie radze, ale czasami trafiam na niejasne elementy.
Analizuje pewną gotową klase i mam taki kawałek kodu:


  1.  
  2. <?
  3. class AuthDataV1
  4. {
  5.  
  6. public $login = 'test';
  7. public $masterFid = 'test';
  8. public $password = 'test';
  9.  
  10. function __construct($cfg) {
  11.  
  12. $this->login = $cfg['dostawa_dpd_fid'];
  13. $this->masterFid = $cfg['dostawa_dpd_login'];
  14. $this->password = $cfg['dostawa_dpd_pass'];
  15.  
  16. }
  17. };
  18.  
  19. $authData = new AuthDataV1($cfg);
  20.  
  21. ....
  22.  
  23. ?>
  24.  


Na początku są podane zmienne public .. następnie w metodzie Construct znowu mamy je zdefiniowane. Te pierwsze to zmienne testowe, jak nie podam swoich docelowych poprzez $cfg wtedy zmienne testowe są tylko brane pod uwagę?
Troche niejasne jest to dla mnie. Mam ciągle problem ze sposobami definiowania zmiennych w klasach.


viking
Akurat ten przykład jest bardzo słaby, choćby dlatego że jak którykolwiek z kluczy tablicy będzie pusty to poleci ostrzeżenie. Nie ma typowania więc $cfg może równie dobrze być stringiem.

  1. <?php
  2. class AuthDataV1
  3. {
  4.  
  5. public $login;
  6. public $masterFid;
  7. public $password;
  8.  
  9. public function __construct(array $cfg)
  10. {
  11. $this->login = $cfg['dostawa_dpd_fid'] ?? 'test';
  12. $this->masterFid = $cfg['dostawa_dpd_login'] ?? 'test';
  13. $this->password = $cfg['dostawa_dpd_pass'] ?? 'test';
  14.  
  15. }
  16. }
  17.  
  18. $cfg['dostawa_dpd_fid'] = 1;
  19. $authData = new AuthDataV1($cfg);
  20.  
  21. echo $authData->login;
  22. echo $authData->password;
luis2luis
Cytat(viking @ 11.07.2019, 10:10:47 ) *
Akurat ten przykład jest bardzo słaby, choćby dlatego że jak którykolwiek z kluczy tablicy będzie pusty to poleci ostrzeżenie. Nie ma typowania więc $cfg może równie dobrze być stringiem.


Jest to wycinek ze specyfikacji kuriera DPD. Wg mnie ten kod również był słaby. Ale ze względu że nie mam doświadczenia w OOP, brakowało pewności siebie.

Twój kod jest dużo dużo lepszy smile.gif


------------- EDIT --------------
czy ten kawałek kodu:
  1. $this->login = $cfg['dostawa_dpd_fid'] questionmark.gif 'test';


nie powinien wyglądac tak? :

  1. $this->login = (!empty($cfg['dostawa_dpd_fid']) ? $cfg['dostawa_dpd_fid'] : 'test');
nospor
Cytat
nie powinien wyglądac tak? :
Jak nie uzywasz php7 to tak, musisz sie bawic w takie potworki co pokazales.
luis2luis
Cytat(nospor @ 11.07.2019, 14:37:25 ) *
Jak nie uzywasz php7 to tak, musisz sie bawic w takie potworki co pokazales.

ok fajnie. Myśle, że jeszcze przez pewien czas bede tak robił żeby zachować wsteczną zgodność.

Chociaż sprawa dosyć dziwna, byłem pewien że mam na serwerze najnowszą wersje php 7.xxx


------------------ EDIT --------------

Jak się okazało na serwerze było ustawione php 5.6 ohmy.gif Dałem na 7,2 i wszystko gra.


Czy jest gdzieś fajnie opisane jakie jeszcze skróty tego typu są dostępne w php 7? Czytałem o nowościach w php 7, ale nigdzie nie widziałem o tym info.
viking
7 miesięcy temu zakończyło się wsparcie dla 7.1, za 4 miesiące koniec dla 7.2. A ty się zastanawiasz nad jakąś dziwną wsteczną zgodnością.
luis2luis
Cytat(viking @ 11.07.2019, 15:03:59 ) *
7 miesięcy temu zakończyło się wsparcie dla 7.1, za 4 miesiące koniec dla 7.2. A ty się zastanawiasz nad jakąś dziwną wsteczną zgodnością.



Racja, robię wg najnowszych metod i tyle.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.