Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MVC] Miejsce na własne funkcje
Forum PHP.pl > Forum > PHP > Object-oriented programming
markonix
Gdzie przechowywać swoje własne funkcje, które nie są związane ściśle z żadną klasą?
Mówie tutaj o jakichś własnych funkcjach "globalnych" typu własna funkcja date, jakieś funkcje operujące na tablicach, stringach i inne, które mogą być używane w różnych miejsach w różnych kontekstach i w programowaniu strukturalnym umieszczałem je po prostu w pliku common.php czy functions.php.

Chciałbym mieć do nich dostęp w Modelu, Kontrolerze i w Widoku.

Jedynie co znalazłem to Helepery, ale nie rozumiem dlaczego umieszczane są w widoku i nie mam pewności czy służą do tego.
marcio
Tak do tego sluza helpery.Nigdzie nie jest napisane ze mozesz je tylko uzywac w widoku mozesz uzyc ich wszedzie.Przewaznie sa to klasy ze statycznymi metodami.
markonix
Tzn oglądałem jakieś przykładowe struktury MVC z helperami i folder helperów był w widoku?

Oki, powiedzmy, że mam helper - ogólnie przyjmuje się jeden heleper = jedna funkcja czy grupa funkcji (np. tablicowe, stringowe, własne funkcje daty)?
viking
Helpery dla poszczególnych modułach mają zadanie wspomagać widoki np możesz sobie napisać jakiś URLhelper który generuje ścieżki urla a w innym module robi coś innego. Klasy ogólne, wspomagające, do zastosowań w wielu projektach możesz trzymać w jakimś folderze klas w library czy vendors.
markonix
Czyli normalnie functions bez klas i gdzieś w bootstrap include tego pliku?
viking
A to zależy co chcesz osiągnąć i jakie podejście.
Możesz zrobić np:

  1. /app
  2. /library
  3. |- /Zend
  4. |- /My
  5. |- /String
  6. /public


  1. <?php
  2. # /library/My/String/StringProvider.php
  3. namespace My\String;
  4.  
  5. class StringProvider {}


I wrzucić do jakiegoś loadera.
bastard13
Wydaje mi się, że wziąłbym te wszystkie Twoje funkcje i spróbował je pogrupować. Wtedy te grupy pozamieniałbym na klasy ze statycznymi metodami.
Z tego co piszesz, te Twoje klasy to jakieś formatery lub/i filtry, więc dobre nazwy dla nich to np. StringFilter, ArrayFormatter (lub, zgodnie z nazewnictwem w Zendzie: Filter_String, Formatter_Array) itp.
Nawet jeżeli klasa ma jedną metodę, to warto, bo kto wie, czy w przyszłości jej nie rozszerzysz, a mieszanie kodu strutkuralnego z obiektowym nie jest raczej dobrym pomysłem.

Co do helperów, to osobiście odradzam. W kontrolerach i widokach są wywoływane w magiczny sposób i czasami ciężko jest debugować kod, gdy coś się posypie.
ADeM
~bastard13:
To co opisałeś w pierwszym akapicie, to właśnie helpery.
Co znaczy, że są wywoływane w magiczny sposób?
!*!
Cytat(markonix @ 27.03.2012, 14:02:06 ) *
Czyli normalnie functions bez klas i gdzieś w bootstrap include tego pliku?


Jeśli są to funkcje globalne to tak. Jeśli ma być to tzw. helper, to raczej nie ma sensu udostępniać go dla całej aplikacji, tylko wtedy gdy jest potrzebny.
bastard13
@ADeM
Są wywoływane w magiczny sposób, bo (w Zendzie) każde takie wywołanie przechodzi przez metodę __call(), a nie przez metodę, która została w tym celu utworzona. Osobiście odradzam czegoś takiego i wolę wywoływanie metod obiektów w sposób jawny.
Jeżeli przez helpery rozumiesz klasy pomocnicze, to jak najbardziej, to o czym pisałem to taki zbiór klas:)
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-2025 Invision Power Services, Inc.