Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z preg_replace
Forum PHP.pl > Forum > Przedszkole
ak233
Witam
Po aktualizacji serwera (na php7) muszę na szybko zaktualizować postawioną na nim stronę.
Mam w niej następującą funkcję

  1. function execute() {
  2. return preg_replace('/{([^}]+)}/e', '$this->dane["\\1"]',$this->tmpl);
  3.  
  4. }

Wiem że problem jest z preg_replace ale nie wiem jak zmienić to na preg_replace_callback
Czy ktoś może pomóc?

Tomplus
  1. function execute() {
  2. return preg_replace_callback('/{([^}]+)}/e', function ($m) { global $this->dane; return $this->dane[$m[1]] ?? ''; }, $this->tmpl);
  3. }


Nie testowałem, ale skorzystałem z kodu z jednej z moich starych stronek, gdzie też miałem podobny problem.
  1. $strona = preg_replace_callback('/\[\[(\w+)\]\]/', function ($m) { global $TPL; return $TPL[$m[1]] ?? ''; }, $strona);


Mam nadzieję że pomogłem znaleźć rozwiązanie.
ak233
Dziękuję za odpowiedź. Muszę się przyglądnąć temu.
Ta funkcja jest częścią klasy i ma składać cała stronę z poszczególnych plików.
Nie czuję się dobry w tych sprawach a chcę usprawnić ten stary kod żebym mógł postawić stronę na nowym sprzęcie.
Zamieszczam źródło klasy w jakiej jest ona zdefiniowana może to polepszy ogląd na jej działanie.

  1. class strona
  2. {
  3. var $tmpl;
  4. var $dane;
  5. function strona($name)
  6. {
  7.  
  8. $this->tmpl = implode('', file($name));
  9. $this->dane = Array();
  10. }
  11. function add($name, $value = '')
  12. {
  13. if (is_array($name)) {
  14. $this->dane = array_merge($this->dane, $name);
  15. } else if (!empty($value)) {
  16. $this->dane[$name] = $value;
  17. } }
  18. function execute() {
  19. return preg_replace('/{([^}]+)}/e', '$this->dane["\\1"]',
  20. $this->tmpl);
  21.  
  22. }}
Tomplus
dobrym obyczajem jest używanie przed function słowa public

  1. public function metodaKlasy() {}
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.