Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [System szablonów] Ukrywanie $this dla ładowanego pliku.
starach
post
Post #1





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

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


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ć?
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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).


--------------------
Go to the top of the page
+Quote Post
starach
post
Post #3





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

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


Nie wiem o co ci chodzi z tym zgadywaniem, ale po prostu jestem ciekaw czy się da coś takiego zrobić.
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  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?


--------------------
Go to the top of the page
+Quote Post
starach
post
Post #5





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

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


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.
Go to the top of the page
+Quote Post
wookieb
post
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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.


--------------------
Go to the top of the page
+Quote Post
Crozin
post
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


  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ż.
Go to the top of the page
+Quote Post
starach
post
Post #8





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

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


Hmm czyli jednak tylko opakowując w funkcję lambda mogę uzyskać taką funkcjonalność... Myślałem że jest jakiś bardziej 'schludniejszy' sposób.
Go to the top of the page
+Quote Post
Crozin
post
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Tylko jedno ważne pytanie: po co w ogóle to ukrywać?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 21:18