empty() vs __get |
empty() vs __get |
22.05.2013, 19:35:12
Post
#1
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Hejka,
mam sobie klasę z metodą magiczną __get, która to metoda zwraca mi właściwość klasy gdy ta istnieje lub zwraca błąd, gdy nie istnieje
No i wszystko byłoby fajnie ale.... Taki o to kod
rzuca mi błędem, bo przecież właściwośc nie istnieje - no niby wszystko ok. Ale z drugiej strony empty() nie powinno rzucać błędów. Tak wiem, że to nie idzie błąd przez empty tylko przez __get. No ale tu właśnie szlag trafił całą moją dotychczasową logikę.... Przychodzą mi do głowy tylko dwa rozwiązania, oba średnio ładne.
lub dopisać do klasy własną metodę empty
ktora to będzie reagowała już właściwie. Jakieś inne propozycje? edit: nie, dopisanie własnej metody Empty nic nie da.... pozostaje jedynie isset. Jakieś inne propozycje? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.05.2013, 19:35:16
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
|
|
|
22.05.2013, 19:36:05
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) |
// EDIT Lub to co @Spawnm Ten post edytował pyro 22.05.2013, 19:36:45 -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
22.05.2013, 19:38:53
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
@pyro nie rozumiem co niby twoj kod miał robić prócz faktu, że wywaliłeś moj lecący error. Error ma lecieć, ale akurat nie w sytuacji co opisałem.
@spawnm też o tym myślałem, ale sprawa się komplikuje gdy to nie jest $ob->wlasciwosc_ktora_nie_istnieje a jest np $ob->wlasciwosc_ktora_nie_istnieje['jakiś index'] -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.05.2013, 19:52:16
Post
#5
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
To bardziej rozbudować trzeba has aby się dało $ob->has(array('foo', 'bar'));
Ew jako kolejna metoda hasIndex czy coś. |
|
|
22.05.2013, 19:59:11
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
I chyba się nie obejdzie bez tego bo w php mają bobol chyba.
Zgodnie z manualem: __isset() is triggered by calling isset() or empty() on inaccessible properties. I faktycznie, gdy robię empty($v->zm3); to przechodzi to przez __isset i nie ma problemu. Ale gdy robię empty($v->zm3['jakisindex']); to niestety przechodzi to już przez __get i pojawia się problem :/ -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.05.2013, 20:02:30
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Po co w ogóle korzystasz z __get()? Dlaczego po prostu nie utworzysz normalnych metod get() oraz has()? Problemy same się rozwiążą. A jeżeli potrzebujesz połączenia sprawdzenia istnienia danego klucza i jego "niepustości" utwórz sobie metodę hasNoEmpty($key). Kod będzie nieporównywalnie bardziej czytelny.
P.S. Poza nielicznymi sytuacjami powinieneś korzystać z array_key_exisists do sprawdzania czy dany klucz istnieje w tablicy. isset zwróci Ci fałszywy wynik w przypadku, gdy wartość znajdująca się pod danym kluczem jest nullem. Ten post edytował Crozin 22.05.2013, 20:03:56 |
|
|
22.05.2013, 20:05:12
Post
#8
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
Działa ok, empty sprawdza index tablicy a nie samą tablicę. Musiał byś dać empty($v->zm3) && empty($v->zm3['jakisindex'])
|
|
|
22.05.2013, 20:06:24
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Ponieważ chcę korzystać z kodu w taki sposób:
echo $ob->zm a nie echo $ob->get('zm') lub nie echo $ob->get(array('zm','index')) Chyba że coś przeoczyłem w Twojej wypowiedzi. Ad ps: tak wiem. Cytat Musiał byś dać empty($v->zm3) && empty($v->zm3['kisindex']) No tak, to się sprowadza do mojego pierwszego zaproponowanego rozwiązania.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.05.2013, 20:06:57
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Co jest nie tak z $ob->get('zm')->get('index')?
Mógłbyś napisać co finalnie chciałbyś osiągnąć? Jaki jest cel tego kodu? Mam wrażenie, że mamy tutaj do czynienia z problemem XY. Ten post edytował Crozin 22.05.2013, 20:08:15 |
|
|
22.05.2013, 20:07:42
Post
#11
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
Cytat No tak, to się sprowadza do mojego pierwszego zaproponowanego rozwiązania. Które warto ubrać w has i hasNoEmpty |
|
|
22.05.2013, 20:11:50
Post
#12
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
No wlasnie nie, bo przy tablicach i indeksach to się robi burdel tylko. Wolę już dopisać tego isset do warunku.
Cytat Co jest nie tak z $ob->get('zm')->get('index')? A to ciekawe. Jak niby taką metodą pobierzesz index X tablicy Y? Zakładam że napisałeś to na szybkiego Cytat Mógłbyś napisać co finalnie chciałbyś osiągnąć? Jaki jest cel tego kodu? Mam wrażenie, że mamy tutaj do czynienia z problemem XY. Przepisuję kod ze smartiego na własny system widoku. Nie chcę za dużo zmieniać w kodzie bo kodów mam sporo. I jeśli w smarty było {if !empty($zm.index)} to ja chciałem poprostu zamienić to na: if (!empty($this->zm['index'])) -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.05.2013, 20:22:53
Post
#13
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
A smarty się przypadkiem nie kompiluje do kodu php?
|
|
|
22.05.2013, 20:23:29
Post
#14
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Kompiluje. I jaki z tego wniosek?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.05.2013, 20:25:57
Post
#15
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
Że dostajesz gotowca? Co się kryje pod 'własny system widoku'?
|
|
|
22.05.2013, 20:28:06
Post
#16
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Cytat A to ciekawe. Jak niby taką metodą pobierzesz index X tablicy Y? Zakładam że napisałeś to na szybkiego Tutaj po prostu założyłem, że nie będziesz korzystać bezpośrednio z PHP-owskich tablic tylko z obiektów-kolekcji.Cytat Przepisuję kod ze smartiego na własny system widoku. Nie chcę za dużo zmieniać w kodzie bo kodów mam sporo. No to teraz przynajmniej znamy problem. I jeśli w smarty było {if !empty($zm.index)} to ja chciałem poprostu zamienić to na: if (!empty($this->zm['index'])) Bezpośrednie przepisanie tego, może być nieco kłopotliwe i nie pozostaje Ci chyba nic innego jak: 1. Ręczne sprawdzanie każdego elementu w łańcuchu przy pomocy empty()/isset(). 2. Utworzenie jakiejś funkcji pomocniczej, która jako pierwszy argument przyjmowałaby zmienną, jako drugi coś na kształt PropertyPath i wykonywała całą robotę za Ciebie. |
|
|
22.05.2013, 20:30:45
Post
#17
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Cytat Że dostajesz gotowca? Co się kryje pod 'własny system widoku'? Znaczy że mam taki fajny system jak SMARTY i nie potrzebnie chce pisać coś własnego? Nie no, proszę, to nie jest temat na to czy SMARTY jest fajny czy nie. Przedstawiłem problem i chciałbym się na nim skupić a nie na tym dlaczego nie chcę już jechać na SMARTYM. @Crozin no i właśnie chyba nie pozostaje mi nic innego.
Powód edycji: [nospor]:
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.05.2013, 20:32:42
Post
#18
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
Miałem na myśli że możesz skorzystać z skompilowanego kodu i olać przepisywanie. Osobiście nie trawię smarto podobnych wynalazków
|
|
|
22.05.2013, 20:34:58
Post
#19
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Cytat Miałem na myśli że możesz skorzystać z skompilowanego kodu i olać przepisywanie A nie, nie ma takiej opcji CHyba nie widziałeś tych potwórków do jakich on to kompiluje, w których jest cała masa jego funkcji i odwołań do jego zmiennych
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.05.2013, 20:38:43
Post
#20
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
Przyznam że nie widziałem, i chyba nie chcę widzieć ;]
|
|
|
Wersja Lo-Fi | Aktualny czas: 26.05.2024 - 06:49 |