Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]pobranie echo z funkcji do zmiennej
Forum PHP.pl > Forum > Przedszkole
taro
Witam.

Witam.

Mam taki problem.

Załóżmy, że mam sobie taką funkcję

function wyswietl() {
echo "2";
echo "+";
echo "2";
}

następnie chciałbym to co zostanie wyświetlone przy użyciu tej funkcji wrzucić jakoś do zmiennej, czyli coś w stylu
$zmienna = wyswietl(); // to oczywiscie glupi przyklad wink.gif

Teraz $zmienna żeby zawierała "2+2".

Jak to można mądrze zrobić, bo mam jakieś zaćmienie umysłu.

Dzięki.
Pozdrawiam.
drPayton
  1. function wyswietl() {
  2. return "2+2";
  3. // czy też
  4. return '2' . '+' . '2';
  5. // jeżeli to z jakiś zmiennych
  6. }
  7.  
  8. $zmienna = wyswietl();
  9.  
  10. //i dalej np
  11.  
  12. echo $zmienna;


Ogólnie - funkcja/metoda klasy nie ma prawa wyświetlać czegokolwiek. Może tylko i wyłącznie zwracać wartość...
Mackos
Funkcja może wyświetlać co się da poprzez echo, jednak jeśli chodzi o zapisywanie do zmiennej to tylko i wyłącznie return wink.gif
drPayton
Powtórzę, bo może niezbyt wyraźnei napisałem:
Funkcja/metoda nie ma prawa wyświetlać czegokolwiek...

Lepiej od razu uczyć się dobrych praktyk, niż potem oduczać - jak ktoś nas opieprzy za amatorkę...
thek
Mackos. To co postulujesz, czyli funkcja wyświetla dane poprzez echo to klasyczny przykład tego co robią amatorzy i początkujący. Wyświetlać powinna tylko i wyłącznie funkcja do tego przewidziana, a więc tak zwany widok aplikacji. Każda inna powinna zwracać wartość, gdyż może to prowadzić do nieoczekiwanych sytuacji. Potem pojawia się codziennie na forum problem z nagłówkami, bo ktoś nie myśli o konsekwencjach tego co robi i w efekcie zanim nagłówki zostaną do przeglądarki wysłane, jakaś głupia funkcja wali coś do bufora, bo zamiast użyć return, ktoś użył echo. Echo powinno być użyte w sposób świadomy, a nie gdzie popadnie.
  1. function jakas() {
  2. echo 'byle co';
  3. }
  4. function jakas2() {
  5. return 'byle co';
  6. }
  7. jakas();
  8. $zmienna = jakas2();
  9. header('Content-Type: text/html');
  10. echo $zmienna;

Niby różnica niewielka, ale w wielu przypadkach pozwala uniknąć wielu głupich i prostych błędów, takie jak choćby z wspomnianymi nagłówkami. Dlatego przyłączam do tego co napisał drPayton: "Nie ucz początkujących złych praktyk."
taro
To, żeby zrobić return to ja wiem, jeżeli chodzi zaś o dobre nawyki również jestem tego świadomy.

Nie rozwiązuje to jednak mojego problemu. Czasami trzeba coś zrobić na przekór ogólnym zasadom, aby działało.

Czasami też rodzi się pytanie, na które nie ma odpowiedzi i tak jest w tym przypadku smile.gif
Nie koniecznie chcę z tego korzystać codziennie, jednak warto wiedzieć jak to zrobić :->
aachi
Może przy pomocy Output Buffering Control?
ob_start(), a pózniej ob_get_contents()?
thek
Czemu więc nie zrobisz tak jak napisałem wyżej?
  1. function jakas() {
  2. return 'byle co';
  3. }
  4. echo jakas();

lub
  1. function jakas() {
  2. return 'byle co';
  3. }
  4. $zmienna = jakas();
  5. //jakieś operacje
  6. echo $zmienna;

Zauważ, że dzięki temu drugiemu przykładowi mogę nawet $zmienna użyć gdziekolwiek. A więc choćby jako:
  1. function jakas() {
  2. return 'byle co';
  3. }
  4. $zmienna = jakas();
  5. //jakieś operacje
  6. echo 'A to nam zwraca funkcja jakas(): '.$zmienna;

Masę problemów się z takim podejściem omija.
drPayton
Cytat(taro @ 11.06.2011, 15:24:13 ) *
(...)
Nie rozwiązuje to jednak mojego problemu. Czasami trzeba coś zrobić na przekór ogólnym zasadom, aby działało.
(...)


Cytat(aachi @ 11.06.2011, 15:35:52 ) *
Może przy pomocy Output Buffering Control?
ob_start(), a pózniej ob_get_contents()?



  1. function wyswietl()
  2. {
  3. echo 'raz';
  4. echo 'dwa';
  5. }
  6.  
  7. wyswietl();
  8. $zmienna = ob_get_contents();
  9.  
  10. echo $zmienna;


Mniej wiecej tak...
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.