Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]pobranie echo z funkcji do zmiennej
taro
post
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 5
Dołączył: 12.12.2008

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


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 (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
drPayton
post
Post #2





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


  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ść...

Ten post edytował drPayton 11.06.2011, 13:54:56
Go to the top of the page
+Quote Post
Mackos
post
Post #3





Grupa: Zarejestrowani
Postów: 362
Pomógł: 44
Dołączył: 10.06.2009

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


Funkcja może wyświetlać co się da poprzez echo, jednak jeśli chodzi o zapisywanie do zmiennej to tylko i wyłącznie return (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
drPayton
post
Post #4





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


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ę...
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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."
Go to the top of the page
+Quote Post
taro
post
Post #6





Grupa: Zarejestrowani
Postów: 58
Pomógł: 5
Dołączył: 12.12.2008

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


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 (IMG:style_emoticons/default/smile.gif)
Nie koniecznie chcę z tego korzystać codziennie, jednak warto wiedzieć jak to zrobić :->
Go to the top of the page
+Quote Post
aachi
post
Post #7





Grupa: Zarejestrowani
Postów: 54
Pomógł: 12
Dołączył: 4.08.2007

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


Może przy pomocy Output Buffering Control?
ob_start(), a pózniej ob_get_contents()?
Go to the top of the page
+Quote Post
thek
post
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.
Go to the top of the page
+Quote Post
drPayton
post
Post #9





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


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...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 23:38