Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [System szablonów] Ukrywanie $this dla ładowanego pliku.
Forum PHP.pl > Forum > PHP > Object-oriented programming
starach
Cześć,

Chciałbym ukryć jakoś w swoim systemie szablonów $this, self i static dla ładowanego w metodzie szablonu. Niestety do głowy przychodzi mi tylko zrobienie funkcji która zajmowała by się ładowaniem tego szablonu. Jako że już na kilometr wali ode mnie OOP to pomysł mi się nie podoba. Poszukuję więc jakiejś alternatywy. Da się coś takiego zrobić?
wookieb
A po co coś takiego Ci usuwać (pomijając kwestię czasochłonności wykonania tego zadania)?
Dodatkowo nie wiem jakim cudem chcesz "zgadywać" w kodzie czy pracować na instacji ($this) czy na metodzie statycznej (self).
starach
Nie wiem o co ci chodzi z tym zgadywaniem, ale po prostu jestem ciekaw czy się da coś takiego zrobić.
wookieb
  1. $this->metoda();
  2. klasa_statyczna::metoda();
  3. self::metoda():


Po ukryciu
  1. metoda();
  2. metoda();
  3. metoda();

Bawmy się w zgaduj zgadule, skąd system ma wiedzieć w jakim kontekście wywołać metodę? Poza tym po czym rozróżnisz, że "metoda" to metoda a nie funkcja?
starach
Chyba trochę przekombinowałeś. Wytłumaczę jeszcze raz. Mam plik 'layout.php' ze zdefiniowanym szablonem strony i klasę Template która go ładuje w metodzie render(). Zastanawiałem się czy da się ukryć $this w metodzie render() żeby nie był on widoczny w layout.php czyli żeby plik z tym co wypluwam przeglądarce nie miał dostępu do metod i składowych prywatnych klasy Template.
wookieb
Po pierwszym poście w życiu nie domyśliłbym się tego co teraz odpowiednio wyjaśniłeś.
Rozwiązaniem które tobie proponuje to rozłam na klasę Template_Render (trzyma dane dla szablonów i wszystkie inne duperele) tworzoną przy wywołaniu render. Wtedy szablon nie będzie mieć dostępu do metod prywatnych itd aczkolwiek koszt takiej modyfikacji w porównaniu do zysków może być mizerny.
Crozin
  1. public function render($template, $vars) {
  2. $exec = function() use($template, $vars) {
  3. extract($vars);
  4. require $template;
  5. };
  6.  
  7. $exec();
  8. }
Gdyby składnia PHP była bardziej "dojrzała" można by pominąć zbędne przypisanie funkcji do zmiennej, tj.:
  1. (function() use(...) {
  2. ...
  3. })();
Ale niestety składnia PHP pod wieloma względami ssie - pod tym też.
starach
Hmm czyli jednak tylko opakowując w funkcję lambda mogę uzyskać taką funkcjonalność... Myślałem że jest jakiś bardziej 'schludniejszy' sposób.
Crozin
Tylko jedno ważne pytanie: po co w ogóle to ukrywać?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.