![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) ![]() ![]() |
Witam,
tworzę obecnie modularną aplikację w PHP opartą o OOP. Każda klasa w swoim konstruktorze przyjmuje obiekt $data, który jest tworzony po stronie przeglądarki i wysyłany na serwer. Problem jest taki, że nigdy nie ma pewności co $data zawiera. Załóżmy, że pisząć moduł , chcę sprawdzić zawartość $data -> pole1 -> pole2, w takim razie muszę to napisać: Kod if (isset($data -> pole1) && isset($data -> pole1 -> pole2) && $data -> pole1 -> pole2 == COŚ) { ... } Biorąc pod uwagę jak bardzo skomplikowana jest struktura $data, jest to niewygodne i nieprzejrzyste. Rozwiązałem problem częściowo za pomocą enkapsulacji każdej wartswy danych w klasę Capsule, która przy odwołaniu $obj -> pole automatycznie zwróci wartość pola i zwróci potrzebną wartość. Kod class Capsule { private $capsuled_frame_data = false; public function __construct($obj = false) { if ($obj !== false) { foreach ($obj as &$val) { if (is_object($val)) { $val = new \Capsule($val); } } $this -> capsuled_frame_data = $obj; } } public function __get($name) { return (isset($this -> capsuled_frame_data -> $name)) ? $this -> capsuled_frame_data -> $name : new \Capsule(); } public function IsEmpty() { return ($this -> capsuled_frame_data !== false) ? false : true; } } W powyższym przykładzie istnienie danego pola zwraca jego wartość, brak new Cepsule(), lecz nie jest to do końca tak jakbym chciał. Chciałbym, by końcowa wartość wynosiła false, tj $data -> pole1 -> pole2 === false Niestety jeżeli zmienię wartość zwracaną " new \Capsule();" na "false", to skrypt wywali się w momencie $data -> pole1, gdyż false nie ma metody pole2. Jak to zrobić tak by $data -> pole1 zwracało new Capsule() a $data -> pole1 -> pole2 już false? Ilość zagnieżdżeń jest dowolna i nazewnictwo tez. Może to być również $data -> cos_innego -> jakies_pole -> chain -> koncowe_pole; |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 11:29 |