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 - 29)
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ć" (IMG:http://forum.php.pl/style_emoticons/default/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? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
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"
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? (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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.
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ę.
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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 (IMG:http://forum.php.pl/style_emoticons/default/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.. (IMG:http://forum.php.pl/style_emoticons/default/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.. (IMG:http://forum.php.pl/style_emoticons/default/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.
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.. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Dlatego należy traktować to jako "oczekujemy resource" (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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).
Go to the top of the page
+Quote Post
LBO
post
Post #21





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

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


@batman, ja nie piszę, że się nie da. Ja piszę, że ten przykładowy kod jest gówniany i każdy programista, który żongluje tak typami (ponieważ się da, phi) byłby u mnie skreślony.

Podobnie jest na wyższym poziomie abstrakcji - dajmy na to OOP. Wiele rzeczy można tam zrobić, ale nie oznacza to, że się powinno. Jeden wzorzec pasuje do rozwiązania z dziedziny problemu.. inny nie.

Zdaje sobie sprawę, że ze ścisłym typowaniem PHP byłoby lepszym językiem, ale radzę sobie bez tego.
Go to the top of the page
+Quote Post
batman
post
Post #22





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




Cytat(LBO @ 27.06.2009, 16:05:24 ) *
@batman, ja nie piszę, że się nie da. Ja piszę, że ten przykładowy kod jest gówniany i każdy programista, który żongluje tak typami (ponieważ się da, phi) byłby u mnie skreślony.
Daleko szukać: mysql_query - zwraca albo zasób albo false. Podobnych funkcji jest cała masa. Bez okrętek nie da się napisać dobrze kodu i nie zależy to od poziomu programisty, tylko od poziomu języka, z którego on korzysta.
Go to the top of the page
+Quote Post
LBO
post
Post #23





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

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


To są naleciałości i tutaj, faktycznie stoi się na przegranej pozycji. Podobnie jest z niekonsekwentnym nazewnictwem w API.

Różnica w tym, że np ja projektując obiekty już tych błędów nie popełniam.
Go to the top of the page
+Quote Post
batman
post
Post #24





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




Cytat(LBO @ 27.06.2009, 16:30:55 ) *
Różnica w tym, że np ja projektując obiekty już tych błędów nie popełniam.
Nie Ty jeden. I z tego właśnie względu powstały różne notacje, między innymi wspomniana notacja węgierska.
Go to the top of the page
+Quote Post
LBO
post
Post #25





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

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


I wracamy do tego, że posiadając potężne IDE tej notacji używać nie muszę ( nie wspominając o meaningful names dla zmiennych).

Tylko proszę nie wspominać znów o kodowaniu na komórce, czy na 5 maszynach na raz. Programista narzędzia i zaplecze mieć musi, a nie w... notatniku.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #26





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

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


Cytat(LBO @ 27.06.2009, 16:42:00 ) *
Tylko proszę nie wspominać znów o kodowaniu na komórce, czy na 5 maszynach na raz. Programista narzędzia i zaplecze mieć musi, a nie w... notatniku.


Tzn usprawniajmy sobie prace z narzedziem z ktorego korzystamy w 99% czasu a nie 1%.

Cytat(batman)
Daleko szukać: mysql_query - zwraca albo zasób albo false. Podobnych funkcji jest cała masa. Bez okrętek nie da się napisać dobrze kodu i nie zależy to od poziomu programisty, tylko od poziomu języka, z którego on korzysta.

A jak mysql_query() ma wskazac ze polaczenie sie nie udalo - i nie ma do dyspozycji wyjatkow. Takich funkcji jest multum. Pewnie ze lepiej kaby byly obiekowe + korzystaly z wyjatkow, ale tak nei jest.

Cytat
// z jakiegos powodu w zmiennej jest false, a nie tablica
$aMyArray = false;
echo implode('.', $aMyArray);


1. Funkcja ktora ustawila $aMyArray na false, nie mogla inaczej wskazac nieprawidlowego wykonania (nie korzysta przeciez z wyjatkow), zwracanie pustej tablicy moglo by byc niewskazane bo moglo by oznaczac np. plik jest pusty (dla file()) zamiast plik nie istnieje, itd.

2. Jesli funkcja moze ci zwrocic false, to Ty, powinienes sprawdzic czy pozniej ta wartosc moze isc do funkcji implode().

Cytat
Przy ścisłej kontroli typów nie byłoby to możliwe

Przy scislej kontroli typow mozesz dostac null'a - czyli jest to mozliwe, ale sie rzuca wyjatkiem.
Go to the top of the page
+Quote Post
batman
post
Post #27





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




Cytat
Przy scislej kontroli typow mozesz dostac null'a - czyli jest to mozliwe, ale sie rzuca wyjatkiem.
Oczywiście przy założeniu, że jest to PHP. Jak na razie nie spotkałem się jeszcze z sytuacją, w której C# zwraca mi null, a nie rzuca wyjątkiem.

Cytat
2. Jesli funkcja moze ci zwrocic false, to Ty, powinienes sprawdzic czy pozniej ta wartosc moze isc do funkcji implode().
I tak też robię, jednak jest to klepanie dodatkowego kodu, który rak naprawdę nic nie wnosi do aplikacji.

Różne notacje powstały po to, by pomóc programistom w takich sytuacjach. Notacja węgierska najlepiej nadawała się do PHP, ponieważ jasno dawała do zrozumienia (przy poprawnie napisanym kodzie) co w zmiennej piszczy. Jednak z nadejściem epoki IDE podpowiadających składnię, zapis węgierski nie jest już potrzebny, ponieważ IDE pokaże co znajduje się w zmiennej.

Nie zmienia to jednak faktu, że PHP nie jest user frienly i to edytor musi korygować błędy języka.
Go to the top of the page
+Quote Post
erix
post
Post #28





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




Cytat
Daleko szukać: mysql_query - zwraca albo zasób albo false.

A ktoś używa czystej implementacji tych funkcji...? Zawsze jest jakiś sterownik albo PDO. No czasem mysqli, ale cóż...
Go to the top of the page
+Quote Post
batman
post
Post #29





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




Cytat(erix @ 27.06.2009, 20:27:46 ) *
A ktoś używa czystej implementacji tych funkcji...? Zawsze jest jakiś sterownik albo PDO. No czasem mysqli, ale cóż...
To był tylko przykład. Takich funkcji jest cała masa.
Go to the top of the page
+Quote Post
ndx
post
Post #30





Grupa: Zarejestrowani
Postów: 17
Pomógł: 6
Dołączył: 11.11.2005

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


Cytat(batman @ 27.06.2009, 09:04:47 ) *
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.

PHP jest językiem typowanym dynamicznie, więc to nie jest wada języka...
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 23.08.2025 - 12:15