Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Różnice przy zastosowaniu preg_match obiekotowo a proceduralnie.
Forum PHP.pl > Forum > PHP
linx
Witam,

mam problem z zastosowaniem funkcji preg_match(, mianowicie w kodzie napisanym proceduralnie działa prawidłowo.
Lecz zastosowanie tego samego wyrażenia już obiektowo powoduje brak danych w zwracanej tablicy.

Proc:
  1. preg_match('#(<body.*>)(.*)(</body>)#', '<body sssf sdv sd>ssss</body>', $wynik);

Obiek:

  1. ...
  2. public function GetReadMail($rev_number){
  3.  
  4. $this -> rev_number = $rev_number;
  5. $this -> _mail = imap_qprint(imap_body($this -> connect, $this -> rev_number));
  6. //echo $this -> _mail;
  7. //problem jest od
  8. preg_match('#(<body.*>)(.*)(</body>)#', $this -> _mail, $this -> matches);
  9. print_r($this -> matches);
  10. ///problem jest do
  11.  
  12. } // Function GetMailHeader EOF
  13. ...



echo i print_r byly dodane do weryfikacji.
Zmienna:
$this -> _mail przyjmuje dane prawidlowo

Jakis pomysl??
styryl
A tak:

  1. public function GetReadMail($rev_number){
  2.  
  3. $this -> rev_number = $rev_number;
  4. $this -> _mail = imap_qprint(imap_body($this -> connect, $this -> rev_number));
  5. //echo $this -> _mail;
  6. //problem jest od
  7. preg_match('#(<body.*>)(.*)(</body>)#', $this -> _mail, $wynik);
  8. $this -> matches = $wynik;
  9. print_r($this -> matches);
  10. ///problem jest do
  11.  
  12. } // Function GetMailHeader EOF
redeemer
Nie ma różnicy między
  1. preg_match('#(<body.*>)(.*)(</body>)#', '<body sssf sdv sd>ssss</body>', $wynik);
  2. var_dump($wynik);
a
  1.  
  2. preg_match('#(<body.*>)(.*)(</body>)#', '<body sssf sdv sd>ssss</body>', $this->wynik);
  3. var_dump($this->wynik);
Błąd masz gdzieś indziej.
linx
Wiem że niema znaczenia czy zmienna jest przekazywana przez $wynik czy bezpośrednio do $this->maches
Ale dlaczego prawie że identyczny kod proceduralnie działa a obiektowo nie?
Nawet jak pokombinuje z wyrażeniem na różne sposoby to udaje mi się przekazać jakieś dane do tablicy.
Lecz jest to nie więcej niż 2 elementy w tablicy a powinna być przynajmniej 4 elementowa.

Jakiś jeszcze pomysł, bo ja już ich nie mam.
redeemer
Zrób w metodzie sobie:
  1. ...
  2. preg_match('#(<body.*>)(.*)(</body>)#', $this -> _mail, $wynik);
  3. preg_match('#(<body.*>)(.*)(</body>)#', $this -> _mail, $this->matches);
  4. var_dump($wynik);
  5. var_dump($this->matches);
  6. exit();
  7. ...
Porównaj dumpy - powinny być takie same. Wniosek: złe wyrażenie regularne, lub $this->_mail zawiera nie dokładnie to co myślisz, że zawiera.
linx
Chyba się nie zrozumieliśmy.

Kiedy do czystego pliku wklejam
  1. <?php
  2. preg_match('#(<body.*>)(.*)(</body>)#', '<body sssf sdv sd>ssss</body>', $wynik);
  3. var_dump($wynik);
  4. ?>

to wszystko działa ok.

Kiedy zaczynam to wklejać do jednej z funkcji w obiekcie to już nie działa (tablica zero elementowa)

  1. public function GetReadMail($rev_number){
  2.  
  3. $this -> rev_number = $rev_number;
  4. $this -> _mail = imap_qprint(imap_body($this -> connect, $this -> rev_number));
  5. //echo $this -> _mail;
  6. //problem jest od
  7. preg_match('#(<body.*>)(.*)(</body>)#', $this -> _mail, $this -> matches);
  8. print_r($this -> matches);
  9. ///problem jest do
  10.  
  11. } // Function GetMailHeader EOF


Na pewno problemem nie jest nazwa 3 elementu funkcji preg_match ( $wynik czy $this->matches nie mają tu wpływu).

Bardziej mnie zastanawia czy może trzeba zastosować jakąś pętle albo inne wyrażenie.
tehaha
Słuchaj @redemmer już Ci napisał, że błąd masz gdzie indziej, więc nie rozumiem, czemu nie możesz się z tym pogodzić.

Możesz sobie wrzucić to:
  1. preg_match('#(<body.*>)(.*)(</body>)#', '<body sssf sdv sd>ssss</body>', $wynik);
  2. var_dump($wynik);

do metody klasy i zobaczysz, że działa tak samo jak poza klasą i błąd jest gdzie indziej. Najprawdopodobniej błąd masz w wyrażeniu regularnym bo zakładasz, że jak działa na banalnym przykładzie to na bardziej skomplikowanej strukturze też zadziała. Nic dokładniej nie da się powiedzieć, ponieważ nie napisałeś co zawiera zmienna $this->_mail;
cudny
twoje wyrażenie jest zachlanne, musisz dac znak zapytania. pisze z komórki, gotowca nie wstawie bo jestem leniwy tak jak poprawne wyrażenie którego powinieneś użyć smile.gif
poczytaj o wyr. reg. zachlannych i leniwych na Google
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.