Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

586 Stron V  « < 563 564 565 566 567 > »   
Reply to this topicStart new topic
> Jeden Wielki OffTopick, jeśli masz pisać na temat, nie wchodź!
redeemer
post
Post #11281





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


To by było dopiero bez sensu, że "tu tak, a tam inaczej". Jak tak bardzo chcecie się obronić przed tym, to proponuję użyć metody magicznej __set i za każdym razem sprawdzać czy jest taka własność obiektu :-)

  1. class Test {
  2. protected $a;
  3.  
  4. public function __set($name, $value) {
  5. if (!property_exists(get_class($this), $name)) {
  6. throw new Exception("ERR");
  7. }
  8.  
  9. $this->$name = $value;
  10. }
  11.  
  12. public function xyz() {
  13. $this->b = 'exception';
  14. }
  15. }
  16.  
  17. $t = new Test();
  18.  
  19. $t->a = 'ok';
  20. $t->b = 'exception';
  21. $t->xyz(); // exception
Go to the top of the page
+Quote Post
pyro
post
Post #11282





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Co to znaczy:

Cytat(redeemer @ 17.02.2016, 20:10:41 ) *
"tu tak, a tam inaczej".


Gdzie by miało być to "inaczej" ?

Nie widzisz różnicy pomiędzy zmiennymi, a właściwościami klasy? To jak działają i są obsługiwane właściwości klasy to jedno, a to jak są deklarowane zwykłe zmienne to drugie?
Go to the top of the page
+Quote Post
com
post
Post #11283





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

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


pyro i reszta taki wywód robicie na ten temat, a każdy zapomniał z was poco wgl jest wymagane deklarowanie właściwości w php, tu chodzi o ich zasięg.

Twój przykład daje możliwość przypisania ale właściwość ta z automaty staje się publiczna, a że public można pomijać w php to i samą deklarację można (IMG:style_emoticons/default/wink.gif)

http://ideone.com/1d5x6j

Przykład, celowo skasowałem public przy metodzie (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował com 17.02.2016, 20:30:53
Go to the top of the page
+Quote Post
pyro
post
Post #11284





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(com @ 17.02.2016, 20:34:15 ) *
pyro i reszta taki wywód robicie na ten temat, a każdy zapomniał z was poco wgl jest wymagane deklarowanie właściwości w php, tu chodzi o ich zasięg.

Twój przykład daje możliwość przypisania ale właściwość ta z automaty staje się publiczna, a że public można pomijać w php to i samą deklarację można (IMG:style_emoticons/default/wink.gif)

http://ideone.com/1d5x6j

Przykład, celowo skasowałem public przy metodzie (IMG:style_emoticons/default/biggrin.gif)


@com, tu nie chodzi o widoczność takich właściwości, bo to że są one domyślnie publiczne nie wiem czy ktokolwiek miał jakieś wątpliwości. Tu chodzi o szczelność oprogramowania. Wyobraź sobie np. taką sytuację:

  1. class Person {
  2.  
  3. private $name;
  4.  
  5. public function __construct($name) {
  6. $this->nme = $name;
  7. }
  8.  
  9. public function getName() {
  10. return $this->name;
  11. }
  12.  
  13. }


I teraz szukaj przyczyny błędu w kodzie tego typu, ale bardziej złożonym. Jak byś dostał błąd, to byś od razu wiedział co jest nie tak.

Pomijam już kwestie typu podpowiadania przez IDE, etc... (EDIT: zresztą mój IDE w przeciwieństwie do PHP traktuje taki kod ostrzeżeniem i prawidłowo (IMG:style_emoticons/default/wink.gif) )

Zresztą temat zdaje się rozwinął ze względu na to, że ktoś napisał, że to przez dynamiczne typowanie PHP, co okazało się nie do końca prawdą ze względu na w/w opis.

Ten post edytował pyro 17.02.2016, 21:03:43
Go to the top of the page
+Quote Post
com
post
Post #11285





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

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


@up, owszem to IDE nie przepuści, zresztą getery setery większość można wyklikać, ale php się tego nie czepia własnie ze względu na to, że ktoś kiedyś założył iż pójdą na rękę programista i public można po dziś dzień pomijać, choć tego się nie robi ze względu na większa czytelność (IMG:style_emoticons/default/smile.gif) Twój przykład jest dobrym przykładem tego iż te założenie było złe, ale nikt sie teraz nad tym nie zastanawia bo mało kto tego używa (IMG:style_emoticons/default/smile.gif)

Taki błąd może się zdarzyć jak ktoś klepie w notatniku, czyli w miarę rzadko (IMG:style_emoticons/default/biggrin.gif) Ale faktem jest że PHP ma różne takie kwiatki (IMG:style_emoticons/default/wink.gif)

http://stackoverflow.com/questions/8163877...rk-in-php-5-3-x (IMG:style_emoticons/default/biggrin.gif)

http://ideone.com/FAIsVR Jeszcze lepiej (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował com 17.02.2016, 21:15:43
Go to the top of the page
+Quote Post
redeemer
post
Post #11286





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Cytat(pyro @ 17.02.2016, 21:01:40 ) *
...
  1. class Person {
  2.  
  3. private $name;
  4.  
  5. public function __construct($name) {
  6. $this->nme = $name;
  7. }
  8.  
  9. public function getName() {
  10. return $this->name;
  11. }
  12.  
  13. }


I teraz szukaj przyczyny błędu w kodzie tego typu, ale bardziej złożonym. Jak byś dostał błąd, to byś od razu wiedział co jest nie tak.
...

Sytuacja analogiczna z kodem nieobiektowym:
  1. $name = 'xxx';
  2.  
  3. if (costam()) {
  4. $nme = 'yyy';
  5. }
  6.  
  7. echo $name;
Skoro tam powinien rzucać błąd, to tu też?

Ja nie twierdzę, że to jest super i tak powinno być, ale dla mnie to logiczne, że konsekwentność jest zachowana.

Powoli PHP wprowadza mechanizmy takie "scalar type declarations" (PHP7), więc wszystko zmierza do większej kontroli. Może za parę będziemy musieli deklarować wszystko w PHP? Kto wie :-)
Go to the top of the page
+Quote Post
com
post
Post #11287





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

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


redeemer akurat w tym wypadku to absurd, a tam faktycznie by się przydało, bo jak to potem kontrolować jak przez błąd programisty wypuścisz sobie jakiś public na świat, z danymi np chronionymi itp. a w Twoim przypadku kto mi broni zrobić zmienna $name = 'xxx'; oraz w warunku $nme = 'yyy';

co do "scalar type declarations" nie miał wyjścia jak mu pod nosem wyrósł hack (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
pyro
post
Post #11288





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


@redeemer, jak wyżej.

Nie wiem czemu próbujesz sprowadzić zmienne i właściwości do bycia tym samym. Pomimo, że obu przypisujesz wartości są to dwie różne rzeczy. Dlaczego właściwościom mogę ustawić widoczność public/protected/private, a zmiennym nie? No właśnie, bo to dwie różne rzeczy.
Go to the top of the page
+Quote Post
redeemer
post
Post #11289





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


IIRC z punktu widzenia PHP właściwość to zmienna (+zend_property_info(?)), ale głowy nie dam, a w kod mi się nie chce teraz patrzeć :-)
Go to the top of the page
+Quote Post
pyro
post
Post #11290





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


To może powiem inaczej, odpowiadając na przykład który podałeś

Cytat(redeemer @ 17.02.2016, 21:28:27 ) *
Sytuacja analogiczna z kodem nieobiektowym:
  1. $name = 'xxx';
  2.  
  3. if (costam()) {
  4. $nme = 'yyy';
  5. }
  6.  
  7. echo $name;


Nie jest to analogiczny przykład, bo w tym przypadku interpreter nie ma możliwości przewidzieć, czy deklaracja zmiennej $nme to wynik błędu czy celowego działania, a w tym przykładzie z klasą, który ja podałem jest taka możliwość - brak zadeklarowania zmiennej, której przypisujesz wartość byłaby przyczyną powstania błędu.

Zresztą jak napisałem wyżej nawet IDE wtedy pluje ostrzeżeniem, co sprawia że taka funkcjonalność nawet już tak jakby jest, tylko niestety jedynie od strony IDE (IMG:style_emoticons/default/wink.gif) (w Twoim przykładzie nie pluje ostrzeżeniem, bo nie ma powodu) . Dość jednoznacznie to wskazuje, że taka funkcjonalność byłaby nie kosmicznym wymysłem, a sensowną implementacją języka.

Ten post edytował pyro 17.02.2016, 22:04:44
Go to the top of the page
+Quote Post
redeemer
post
Post #11291





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Zgoda, analogia nietrafiona.

Cytat(pyro @ 17.02.2016, 22:00:15 ) *
... (w Twoim przykładzie nie pluje ostrzeżeniem, bo nie ma powodu) ...
A nie powinno wypluć "unused variable"? :-)

Ps. Mój poprzedni przykład z __set był na wyrost bo za manualem "__set() is run when writing data to inaccessible properties".

Wystarczy więc:
  1. ...
  2. public function __set($name, $value) {
  3. throw new Exception("ERR");
  4. }
  5. ...
Go to the top of the page
+Quote Post
pyro
post
Post #11292





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


No tak, ale musiałbyś to robić ręcznie za każdym razem, a sęk w tym, żeby język był szczelny samoistnie (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
com
post
Post #11293





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

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


oj wyczuwam posypało by się masę kodów (IMG:style_emoticons/default/biggrin.gif) przez moment to działało według stack w 5.3 (IMG:style_emoticons/default/biggrin.gif)

ale to chyba nie prawda bo nie udało mi się odtworzyć (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
solificati
post
Post #11294





Grupa: Zarejestrowani
Postów: 26
Pomógł: 10
Dołączył: 17.03.2012

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


Cytat(redeemer @ 17.02.2016, 21:28:27 ) *
Może za parę będziemy musieli deklarować wszystko w PHP? Kto wie :-)

W wielu silnie i statycznie typowanych językach nie trzeba deklarować większości typów, także może wezmą przykład z tych lepszych rozwiązań.
Go to the top of the page
+Quote Post
Fred1485
post
Post #11295





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


Jak się nazywała technika, w której dajmy na to obrazki mające float left czy display inline-block ustawiały się ładnie w rzędach, nawet jeśli jeden obrazek miał większą wysokość to inne nie były przesuwane do nowego wiersza tylko ładnie "wskakiwały" na wolne miejsce? Widziałem kiedyś nazwę tego, tutoriale ale nie mogę skojarzyć.

Ten post edytował Fred1485 24.02.2016, 19:18:27
Go to the top of the page
+Quote Post
Comandeer
post
Post #11296





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Masonry? http://isotope.metafizzy.co/layout-modes/masonry.html
Go to the top of the page
+Quote Post
Fred1485
post
Post #11297





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


Dokładnie, dzięki wielkie.
Go to the top of the page
+Quote Post
starach
post
Post #11298





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

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


  1. $keys = new \stdClass();
  2. $keys->one = "copper";
  3. $keys->two = "silver";
  4. $keys->three = "gold";
  5.  
  6. foreach($keys as $key) {}


Zastanawiam się tylko po co taką konstrukcję stosować i czy istnienie tej funkcji było zamierzone czy przypadkowe.
Go to the top of the page
+Quote Post
Comandeer
post
Post #11299





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Co poniektórzy puryści na pewno by się na Twój kod oburzyli, zauważając, że istnieje ArrayObject (IMG:style_emoticons/default/nerdsmiley.png)
Go to the top of the page
+Quote Post
ZenekN
post
Post #11300





Grupa: Zarejestrowani
Postów: 425
Pomógł: 6
Dołączył: 7.08.2012

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


Od kilku dni analizuję cały silnik www.quikr.com, i jestem pełen podziwu dla tego projektu jest tam tak dużo rozwiązań że nie ogarniam (IMG:style_emoticons/default/wink.gif)

Ten post edytował ZenekN 25.02.2016, 11:56:00
Go to the top of the page
+Quote Post

586 Stron V  « < 563 564 565 566 567 > » 
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: 14.06.2026 - 04:14