Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: modyfikacja skryptu na OOP
Forum PHP.pl > Forum > PHP
ksenonlogin
Witam

Niżej znajduje się fragment który jest odpowiedzialny za podmianę ciągów znaków na ciągi podane przez zmienną bądź wpisane bezpośrednio przez programistę.
Chodzi o to że skrypt jest dość mało czytelny gdy stosuje go w kilku miejscach i chciałem go przerobić na wersję obiektową, ale tak bym mógł dodawać nieograniczoną ilość elementów do podmiany.

  1. $array_list_article['{rodzaj1}'] = '1a';
  2. $array_list_article['{rodzaj2}'] = '2a';
  3. $array_list_article['{rodzaj}'] = '3a';
  4. $html_list_article = file_get_contents('home.html');
  5. foreach ($array_list_article as $title_list_article => $content_list_article) {
  6. $html_list_article = str_replace($title_list_article, $content_list_article, $html_list_article);
  7. }
  8.  
  9. echo $html_list_article;
klocu
Na wstępie odesłałbym do manuala funkcji str_replace. Dlaczego?

Przykład z php.net:
  1. $phrase = "You should eat fruits, vegetables, and fiber every day.";
  2. $healthy = array("fruits", "vegetables", "fiber");
  3. $yummy = array("pizza", "beer", "ice cream");

Robi dokładnie to samo co chcesz bez pakowania się w foreach'a.
Faktem jest, że przyjmuje ciut inny sposób rozpisania tablic, ale kończy się tym samym.

OOP to średnio z tego wyjdzie, ale kawałek funkcji na pewno.
Funkcja z 3 parametrami wymaganymi. 1 - tablica, 2 - tablica, 3 - łańcuch znaków.
Na początku sprawdzasz czy pierwsze dwa są tablicami, a 3 łańcuchem znaków i czy plik przez niego wskazywany istnieje.
Jak warunki spełnione robisz str_replace'a w/g danych przesłanych przez parametry funkcji.

Dobrze zrozumiałem Twoją koncepcję?
ksenonlogin
Tak, ale mając dwie tablice (jak pokazałeś wyżej) muszę pilnować kolejności i przy wielkiej ilości na przykład zmiennych zacznie się robić nieczytelny, czy raczej trudny do odczytania kod.

Kod naskrobany prze zemnie jest może mało wydajny przy większych plikach, ponieważ musi zasysać ciąg znaków tyle razy ile jest elementów w tablicy (a przy dużym ciągu może to męczyć skrypt), ale staram się te elementy rozbijać i zapisywać w "cache"; z drugiej strony umieszczając cały czas ten sam kod w kilku miejscach zaczyna się też robić ciasny natłok i chcąc kiedyś to zmienić muszę latać po wszystkich plikach.

Mi chodzi o to by przekazywać wartości do class-y w postaci:

  1. $tablica['{stara-wartosc-w-ciagu1}'] = 'nowa wartość w ciągu1';
  2. $tablica['{stara-wartosc-w-ciagu2}'] = 'nowa wartość w ciągu2';
  3.  
  4. +
  5.  
  6. $a-> $tablica;


dokładanie nie wiem jak to zrobić, ponieważ wszystko piszę strukturalnie, a zaczynam przesiadać się na OOP - chcę doprowadzić całość do czytelnej postaci.
klocu
W sumie nie musisz, aż tak pilnować kolejności.
To co zapisałeś w przykładzie jest analogiczne do:
  1. $tablica = array('{stara-wartosc-w-ciagu1}' => 'nowa wartość w ciągu1', '{stara-wartosc-w-ciagu2}' => 'nowa wartość w ciągu2');


Mówiąc szczerze nie widzę sensu budowania całej klasy dla potrzeb kilku replacementów w łańcuchu znaków.
Jak dla mnie to nadal jest funkcja (w klasie operującej na ciągach znaków - jak najbardziej).
Możesz przekazać całą taką tablicę jako jeden parametr i wewnątrz próbować pociachać ją za pomocą array_keys i array_values, następnie spłaszczyć i potraktować tekst preg_replace'm.

--
Może to takie przyzwyczajenia z frameworka - ale wszystko da się zrobić.
ksenonlogin
Już zrobione wszystko ładnie działa...

Dzięki za wskazówki wink.gif
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.