Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [str_replace] Podmiana znaku na wynik funkcji...
Szymon
post 12.03.2007, 21:46:38
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 24.07.2003
Skąd: Bielsko-Biała

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


Witam,


Chcialbym przy uzyciu funkcji str_replace() podmienic ciag znakow na wynik funkcji, np:

  1. <?php
  2. str_replace('abc',funkcja(),$string);
  3. ?>


Przykladowa funkcja wyglada tak:

  1. <?php
  2. function funkcja(){
  3.  
  4. @include ('plik.php');
  5. $buf = ob_get_contents();
  6.  
  7. return $buf;
  8.  
  9. }
  10. ?>


Teraz, problem polega na tym, ze plik 'plik.php' jest includowany nawet, kiedy funkcja nie powinna zostac wywolana - czyli, kiedy w $string nie ma znakow 'abc', i tak wlasciwie sie dzieje, bo nie jest zwracany zaden wynik, ale plik 'plik.php' zostaje mimo wszystko includowany, co widze kiedy wywolam:

  1. <?php
  2. $ifiles=get_included_files(); print_r($ifiles);
  3. ?>


Czy da sie jakos uniknac includowania 'nieproszonych' plikow?
Chcialbym, zeby includowaly sie tylko wtedy kiedy funkcja rzeczywiscie zostanie wywolana.


Z gory dziekuje za pomoc!


--------------------
Pozdrawiam,
Szymon
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Norbas
post 13.03.2007, 00:26:12
Post #2





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


Cytat
Teraz, problem polega na tym, ze plik 'plik.php' jest includowany nawet, kiedy funkcja nie powinna zostac wywolana...

Jest wywoływana smile.gif. Gdy interpreter napotka instrukcję
Kod
str_replace('abc',funkcja(),$string);

to ją wykonuje, czyli m.in. wywołuje funkcję funkcja()
Cytat
Czy da sie jakos uniknac includowania 'nieproszonych' plikow?

Zdefiniuj dodatkową funkcję, która przed wykonaniem zastępowania znaków sprawdzi czy $string zawiera ciąg znaków do zamiany


--------------------
Go to the top of the page
+Quote Post
Szymon
post 13.03.2007, 08:10:36
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 24.07.2003
Skąd: Bielsko-Biała

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


Ok, ale kiedy mam takich funkcji 40? smile.gif

Moge dodac instrukcje, ktora 40 razy bedzie sprawdzac, czy taki string wystepuje, ale czy nie jest to niepotrzebne przymulanie skryptu?


--------------------
Pozdrawiam,
Szymon
Go to the top of the page
+Quote Post
misiek172
post 13.03.2007, 15:11:01
Post #4





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

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


weź dodaj tu poprostu:

  1. <?php
  2. str_replace('abc',funkcja('abc'),$string);
  3. ?>


  1. <?php
  2. function funkcja($xx){
  3.  
  4. if($xx!='' && $xx!=' '){
  5.  
  6. @include ('plik.php');
  7. $buf = ob_get_contents();
  8. return $buf;
  9.  
  10. }else{
  11.  return false; // czy tam exit... niewiem co zatrzymuje str_replace... 
  12.  // poprostu wywołaj błąd biggrin.gif a str_replace poprzedź @
  13. }
  14.  
  15. }
  16. ?>


Ten post edytował misiek172 13.03.2007, 15:14:28


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Szymon
post 13.03.2007, 18:49:14
Post #5





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 24.07.2003
Skąd: Bielsko-Biała

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


Niestety, nie dziala. Ten sam efekt...


--------------------
Pozdrawiam,
Szymon
Go to the top of the page
+Quote Post
Norbas
post 13.03.2007, 20:41:38
Post #6





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


Cytat
Ok, ale kiedy mam takich funkcji 40?

Naprawdę musisz dołączać 40 plików?

Przed wywołaniem instrukcji str_replace powinieneś wstawić instrukcję warunkową:
  1. <?php
  2. if (strpos($string, 'abc') !== false)
  3. str_replace('abc',funkcja(),$string);
  4. ?>


Cytat
Moge dodac instrukcje, ktora 40 razy bedzie sprawdzac, czy taki string wystepuje, ale czy nie jest to niepotrzebne przymulanie skryptu?

Zdecydowanie więcej czasu zajmie dołączanie plików niż wykonywanie instrukcji if


--------------------
Go to the top of the page
+Quote Post
Szymon
post 14.03.2007, 14:06:50
Post #7





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 24.07.2003
Skąd: Bielsko-Biała

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


Dzieki, tak zrobie.

Ktora mozliwosc bedzie mniejszym obciazeniem dla procesora:

  1. <?php
  2. if(stristr($string,'abc'))
  3. $string= str_replace('abc',funkcja(),$string);
  4. ?>


Czy wspomniane przez Ciebie:

  1. <?php
  2. if (strpos($string, 'abc') !== false)
  3. $string = str_replace('abc',funkcja(),$string);
  4. ?>


--------------------
Pozdrawiam,
Szymon
Go to the top of the page
+Quote Post
Kicok
post 14.03.2007, 16:31:55
Post #8





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Cytat("manual - strstr()")
Notatka: If you only want to determine if a particular needle occurs within haystack, use the faster and less memory intensive function strpos()" title="Zobacz w manualu PHP" target="_manual instead.


--------------------
"Sumienie mam czyste, bo nieużywane."
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: 14.08.2025 - 05:22