Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przejrzystość kodu
caladan
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 4.01.2009

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


Witam.
Często w kodach można się spotkać z zapisami zmiennych np. $sNazwa, $aNazwa, $_nazwa. Rozumiem że 's' ,'a' to określenie typów zmiennych. Po co się to stosuje i kiedy to jest przydatne i czy nejlepiej zawsze jest to stosować. Czy nie wystarczy w komentarzach klasy opisać typ zmiennej. No i jeszcze '_' - to kompletnie nie wiem co oznacza. Fajnie jakby ktoś rzucił linkiem żebym mógł poczytać, bo googlarkę nie wiem o co pytać.
Powód edycji: [erix] przeniosłem
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
LBO
post
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


To jest tzw notacja węgierska.
Go to the top of the page
+Quote Post
Vielta
post
Post #3





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 9.04.2007
Skąd: Szczecin

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


Zależy od osoby. Jedni stosują, inni nie. Stosuje się to po to, żeby nie zastanawiać się/sprawdzać jaki typ ma dana zmienna. Przydatne jest w zasadzie zawsze. $_nazwa osobiście używam przy zmiennych statycznych, nie wiem czy ma to jakieś inne użycie.
Go to the top of the page
+Quote Post
LBO
post
Post #4





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Cytat(Vielta @ 26.06.2009, 16:44:43 ) *
Zależy od osoby. Jedni stosują, inni nie. Stosuje się to po to, żeby nie zastanawiać się/sprawdzać jaki typ ma dana zmienna. Przydatne jest w zasadzie zawsze.


Dlaczego przydatne zawsze? Osobiście nigdy nie potrzebowałem tego typu podpowiedzi - szczególnie w dobie zaawansowanych IDE, gdzie najeżdżam na atrybut/zmienną i wiem wszystko co potrzebuję.

Cytat(Vielta @ 26.06.2009, 16:44:43 ) *
$_nazwa osobiście używam przy zmiennych statycznych, nie wiem czy ma to jakieś inne użycie.


W standardzie kodowania ZF takim prefiksem oznacza się zmienne i funkcje prywatne/chronione.
Go to the top of the page
+Quote Post
Vielta
post
Post #5





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 9.04.2007
Skąd: Szczecin

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


Dla mnie przydatne ze względu na programowanie na różnych komputerach, czasem w domu, czasem poza domem na laptopie, czasem dopisywanie czegoś w biegu na telefonie (bo coś "nagle, samo z siebie przestało działać" tongue.gif). Więc nie zawsze z dostępem do eclipse, z którego to korzystam.

Z ZF styczności zbytnio dużej nie mam, miałem chęci nauczenia się korzystania z tego tałatajstwa ale jakoś nie wiedziałem do końca z której strony się zabrać. Parafrazując stare przysłowie, co programista to obyczaj.


Zresztą, co ten temat robi w tym dziale?;o

Ten post edytował Vielta 26.06.2009, 16:01:45
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Więc nie zawsze z dostępem do eclipse, z którego to korzystam.

Jeśli używasz phpDoc, to po co Ci dostęp do Eclipse? tongue.gif


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Kiedys uzywalem tej "notacij wegierskiej" - niepotrzebna, a potem jak potrzebujesz wpisac zmienna wraz z uzyciem podpowiadania to.... musisz wiedziec jakiego jest typu, a skoro musisz wiedziec to po co ci go zapisywac.

$sNa<ctrl+spacja>

wiec jest to bez sensu.

Nazwy moich zmiennych jednoznacznie wskazuja na typ zmiennej:
$userName; // string
$postCount; // int
$post; // object
$posts; // array/collection of objects

tam gdzie sie tak nie da - to coz pozostaja komentarze.

Zmienne statyczne (rozumiem ze klasy) - po co jakos je wyrozniac skoro i tak sie do nich odwolujemy przez
self::$statyczna;
a deklarujemy uzywajac "static"


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Vielta
post
Post #8





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 9.04.2007
Skąd: Szczecin

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


Cytat(erix @ 26.06.2009, 17:17:03 ) *
Jeśli używasz phpDoc, to po co Ci dostęp do Eclipse? tongue.gif
A teraz mi pokaż gdzie napisałem o używaniu phpDoc.
Go to the top of the page
+Quote Post
osl
post
Post #9





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

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


w zupełności zgadzam się z dr_bonzo. notacji węgierskiej używam tylko przy JS, a i tam można bez tego - kwestia przyzwyczajenia.
Poza tym, tak jak napisał przedmówca, dla mnie również najważniejsze jest to, żeby nazwa zmiennej jak najwięcej mówiła o sobie, ale bez zbędnych przyrostów.

A jak widze czasem zmienne typu $a,$b,$zmienna... to mnie krew zalewa winksmiley.jpg
Go to the top of the page
+Quote Post
batman
post
Post #10





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Notacji węgierskiej używałem z powodzeniem przez długi czas i bardzo dobrze mi służyła. Jednak w momencie, jak przesiadłem się na Eclipse, od razu z takiego zapisu zrezygnowałem. Obecnie stosuję taki zapis, jak przedstawił ~dr_bonzo.
Notacja węgierska dobrze się sprawdza w bazie danych. Przede wszystkim odpada problem słów kluczowych.
A znak podkreślenia ( _ ) nie został wymyślony przez ZF. Jest to powszechna praktyka stosowana do oznaczenia prywatnych i chronionych metod i właściwości.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
erix
post
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




~Vielta - napisałeś o przenośności, ja odpowiedziałem. [;

Czytaj, co piszę.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cytat
A znak podkreślenia ( _ ) nie został wymyślony przez ZF. Jest to powszechna praktyka stosowana do oznaczenia prywatnych i chronionych metod i właściwości.

...za czasow php 4 gdzie nie dalo sie okreslac poziomu widocznosci zmiennych - wszytkie byly publiczne.
A dobre IDE - podpowie ci nazwe zmiennej, a na liscie, obok zaznaczy poziom jej widocznosci. Wiec.... ja tej metody nie uzywam smile.gif


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Vielta
post
Post #13





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 9.04.2007
Skąd: Szczecin

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


@erix:
Mea culpa, późna godzina jest (tjaa). Notacja węgierska to w moim wypadku przyzwyczajenie po czasach gdy pisałem jeszcze korzystając z np. N++ czy innych programów, w których podpowiadanie składni, etc. nie jest takie dobre jak w Eclipse czy Netbeansie. W sumie czas zacząć używać phpdoc'a tongue.gif
Go to the top of the page
+Quote Post
starach
post
Post #14





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Używam NetBeans 6.5 i notacji węgierskiej. Dzięki niej łatwiej mi się segreguje zmienne w końcowej fazie przez co jeśli muszę coś zmienić jest to banalnie proste. Nie muszę używać żadnych skrótów czy klikać po menusach, żeby wiedzieć za co odpowiada jaka zmienna. Polecam stosowanie tej metody w PHP.
i = integer
s = string
c = char
m = mixed
b = boolean
a = array
r = resource
_ = private / protected ( przestałem stosować to w zmiennych kiedy przerzuciłem się na notacje węgierską. Teraz tego prefiksu używam tylko w nazwach metod )

Dzisiaj na przykład machnąłem sobie klasę która mi pobiera pliki z serwera FTP i je obrabia.
  1. <?php
  2. private $sFtpUser = '';
  3. private $sFtpPass = '';
  4. private $sFtpAddress = '';
  5. private $rFtpLink;
  6.  
  7. public function init(Context $c)
  8. {
  9.    // Connect to FTP server
  10.    $this->rFtpLink = ftp_connect($this->sFtpAddress);
  11.  
  12.    // check connection and login
  13.    if(!$this->rFtpLink || !ftp_login($this->rFtpLink, $this->sFtpUser, $this->sFtpPass))
  14.    {
  15.        throw new Error('app.ctrl.data.update.auth');
  16.    }
  17.  
  18.    //(...)
  19.  
  20.    // close the FTP stream
  21.    ftp_close($this->rFtpLink);
  22. }
  23. ?>
W sumie wydaje mi się że takie manipulacje na FTP powinny odbywać się w modelu, ale już nie chciało mi się bawić w te ceregiele zwłaszcza że model w moim FW jest kiepsko obsługiwany.
Go to the top of the page
+Quote Post
Crozin
post
Post #15





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@orglee: ftpUser, ftpPass, ftpAddress - już po tym widać co w tej zmiennej jest. rFtpLink zamień na ftpStream czy ftpHandle.
Ale w sumie... jak Ci pasuje to zostaw jak jest, trochę śmieszne jest bo rFtpLink czasami jest resourc'em, a czasami booleanem tak naprawdę, ale.. winksmiley.jpg
Go to the top of the page
+Quote Post
batman
post
Post #16





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat(Crozin @ 27.06.2009, 08:27:18 ) *
...rFtpLink czasami jest resourc'em, a czasami booleanem tak naprawdę, ale.. winksmiley.jpg
I tutaj dochodzimy do największej wady PHP - brak ścisłej kontroli typów. Pół biedy, gdyby funkcje zwracały zawsze ten sam tym danych, a nie raz zasób, a raz bool.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
bim2
post
Post #17





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Cytat(Crozin @ 27.06.2009, 06:27:18 ) *
rFtpLink czasami jest resourc'em, a czasami booleanem tak naprawdę, ale.. winksmiley.jpg

Dlatego należy traktować to jako "oczekujemy resource" smile.gif


--------------------
Go to the top of the page
+Quote Post
Crozin
post
Post #18





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@batman: czy brak ścisłej kontroli typów to największa wada PHP? Nie powiedziałbym. Ale wsteczna kompatybilność powoduje że taka ftp_connect() zamiast rzucić wyjątkiem zwróci false.

@bim2: I jaki to ma wtedy sens skoro programista nadal musi dojść do tego jakim typem jest dana zmienna/pole? Bo na oznaczeniu w nazwie nie może do końca polegać, a kod staje się wtedy wręcz zdradziecki:
  1. <?php
  2.  
  3. $aMyArray = array(...);
  4. $aMyArray = doSth();
  5.  
  6. if($aMyArray === false){
  7.   //wtf?
  8. }
  9. ?>
Go to the top of the page
+Quote Post
LBO
post
Post #19





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Proszę, bez demonizowania winksmiley.jpg PHP nie jest ściśle typowany i nie będzie. Koniec i kropka.
Ma to swoje wady (trudniejszy debug) i zalety (niski próg wejścia)

Cytat
I jaki to ma wtedy sens skoro programista nadal musi dojść do tego jakim typem jest dana zmienna/pole? Bo na oznaczeniu w nazwie nie może do końca polegać, a kod staje się wtedy wręcz zdradziecki


  1. <?php
  2. /**
  3.  * @var array|bool
  4.  */
  5. $aMyArray;
  6.  
  7. // Da się? da.
  8. ?>


Mimo wszystko kod, który przedstawiłeś, jest po prostu złym kodem i nie świadczy u ułomności PHP, a raczej o kiepskich zdolnościach programisty.
Go to the top of the page
+Quote Post
batman
post
Post #20





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




~LBO
Kod przedstawiony jest jak najbardziej na miejscu. Oto przykład:
  1. <?php
  2. // z jakiegos powodu w zmiennej jest false, a nie tablica
  3. $aMyArray = false;
  4. echo implode('.', $aMyArray);
  5. ?>

Powyższy kod spowoduje powstanie warninga:
Cytat
Warning: implode() [function.implode]: Invalid arguments passed in

Przy ścisłej kontroli typów nie byłoby to możliwe. A jeśli PHP byłoby napisane z sensem, to funkcja, która zwróciła false, rzuciłaby wyjątkiem lub zwróciła pustą tablicę (taki bezsens wydaje mi się bardziej możliwy, patrząc na obecne dokonania twórców PHP).


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Aktualny czas: 21.08.2025 - 12:21