Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z preg_replace
ak233
post 22.03.2019, 00:02:22
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 21.03.2019

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


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?

Go to the top of the page
+Quote Post
Tomplus
post 22.03.2019, 06:46:48
Post #2





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


  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.

Ten post edytował Tomplus 22.03.2019, 16:26:54
Go to the top of the page
+Quote Post
ak233
post 22.03.2019, 07:35:35
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 21.03.2019

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


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. }}
Go to the top of the page
+Quote Post
Tomplus
post 22.03.2019, 16:28:19
Post #4





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


dobrym obyczajem jest używanie przed function słowa public

  1. public function metodaKlasy() {}
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 Wersja Lo-Fi Aktualny czas: 28.03.2024 - 13:58