Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z foreach
ladovnik
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Witam. Mam pewien problem z foreach. Napisałem taki oto kod:

  1. <?php foreach(getSongs() as $data): ?>
  2. <tr>
  3. <td><strong><?php songId(); ?></strong></td>
  4. <td><strong><?php songName(); ?></strong></td>
  5. <td><strong><?php songFile(); ?></strong></td>
  6. <td><strong><?php songSize(); ?></strong></td>
  7. </tr>
  8. <?php endforeach; ?>


Funkcja songId() to:
  1. function songId() {
  2. global $data;
  3. echo $data['s_id'];
  4. }


Niestety, w/w funkcja nie widzi zmiennej $data, podobnie jak pozostałe. Czy wie ktoś, co z tym zrobić?

Pozdrawiam,
ladovnik

Ten post edytował ladovnik 13.02.2011, 13:15:29
Go to the top of the page
+Quote Post
cycofiasz
post
Post #2





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


daj nad pętlą taki kod:

  1. echo '<pre>';
  2. print_r(getSongs());


I sprawdź czy tablica jest poprawna, najlepiej ją tu wstaw

Ten post edytował cycofiasz 13.02.2011, 13:26:53
Go to the top of the page
+Quote Post
Zbigizmi
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 4
Dołączył: 4.02.2011

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


A co robi funkcja getSongs()?

Nie może widzieć zmiennej $data ponieważ deklaracja o global znajduje się wewnątrz funkcji
a tam już jej niem.
Zrób
  1.  
  2.  
  3. <?php foreach(getSongs() as $data): ?>
  4.  
  5. <tr>
  6.  
  7. <td><strong><?php songId($data); ?></strong></td>
  8.  
  9. <td><strong><?php songName($data); ?></strong></td>
  10.  
  11. <td><strong><?php songFile($data); ?></strong></td>
  12.  
  13. <td><strong><?php songSize($data); ?></strong></td>
  14.  
  15. </tr>
  16.  
  17. <?php endforeach; ?>
  18.  
  19.  
  20.  
  21. function songId($data) {
  22.  
  23. echo $data['s_id'];
  24.  
  25. }
Go to the top of the page
+Quote Post
cycofiasz
post
Post #4





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Cytat
Nie może widzieć zmiennej $data ponieważ deklaracja o global znajduje się wewnątrz funkcji


A gdzie w takim razie umieściłbyś global?
Go to the top of the page
+Quote Post
Zbigizmi
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 4
Dołączył: 4.02.2011

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


W ogóle nie jest potrzebny. Po prostu przekazujesz $data jako parametr do funkcji i tam dalej obrabiasz,
Czyli robisz echo po indeksie nie musisz robić do tego 4 funkcji. Chyba że je potrzebujesz w innym miejscu.
A najszybciej to zrobić w ten sposób w ogóle nie używając funkcji:
  1. <td><strong><?=$data['s_id'] ?></strong></td>

Zamiast echo można w tym przypadku użyć znak równości.(skrócona notacja)

Ten post edytował Zbigizmi 13.02.2011, 16:52:35
Go to the top of the page
+Quote Post
cycofiasz
post
Post #6





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Pytam bardziej ogólnie, nie w kontekście tego wątku.
Go to the top of the page
+Quote Post
Zbigizmi
post
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 4
Dołączył: 4.02.2011

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


W zasadzie najlepiej nigdy, można się bez tego obejść.
A jak już musisz to na samym początku skryptu.
Go to the top of the page
+Quote Post
cycofiasz
post
Post #8





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Chcesz powiedzieć że uruchamiając poniższy skrypt powinno się wyświetlić "hello"?

  1. <?php
  2.  
  3. global $a;
  4.  
  5. $a = 'hello';
  6.  
  7. function fu()
  8. {
  9. echo $a;
  10. }
  11.  
  12. fu();
  13. ?>
Go to the top of the page
+Quote Post
Zbigizmi
post
Post #9





Grupa: Zarejestrowani
Postów: 18
Pomógł: 4
Dołączył: 4.02.2011

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


Ale po co Ci ten global, ja zrobisz tak to wszystko będzie
dobrze, gdy zrobisz tak:

  1. <?php
  2.  
  3.  
  4. $a = 'hello';
  5.  
  6. function fu($a)
  7. {
  8. echo $a;
  9. }
  10.  
  11. fu($a);
  12. ?>

Po to są parametry funkcji
Go to the top of the page
+Quote Post
cycofiasz
post
Post #10





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


To nie ja mam problem. Próbuję ci tylko dać do zrozumienia że nie wiesz jak działa global i wprowadzasz autora tematu w błąd
Go to the top of the page
+Quote Post
Zbigizmi
post
Post #11





Grupa: Zarejestrowani
Postów: 18
Pomógł: 4
Dołączył: 4.02.2011

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


Ok, Superguru:)
Pamiętaj, że:

Zasięg zmiennej to zakres od miejsca utworzenia do miejsca zniszczenia zmiennej. Zmienne mogą być superglobalne , globalne oraz lokalne. Wszystkie zmienne tworzone poza funkcjami są globalne, a zmienne tworzone w funkcjach mają zasięg lokalny.

Jeśli chodzi o to, że odwołania wewnątrz funkcji będą dotyczyły zmiennej globalnych po zadeklarowaniu ich jako takich, to nie jest to dobra praktyka i należy jej unikać. To już lepiej się odwołać przez $_Globals.

pozdrawiam

Ten post edytował Zbigizmi 13.02.2011, 19:45:58
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 Aktualny czas: 21.08.2025 - 01:57