Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przekazywanie parametrów funkcji w klasie
Eldiane
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 6.01.2011
Skąd: Sosnowiec

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


Mam pewien problem, mam oto takie dwie funkcje w klasie:
  1. public $przyciski = array('TWORZENIE_STRONY_OBIEKTY.php', 'Button2', 'Button3', 'Button4');
  2.  
  3. public function SprURL($przyciski)
  4. {
  5. for($i=0; count($przyciski) >= $i ; $i++)
  6. {
  7. if(strstr($_SERVER['PHP_SELF'], $przyciski[$i]))
  8. {
  9. $Przycisk_on = $przyciski[$i];
  10. return $Przycisk_on;
  11. }
  12. }
  13. }
  14.  
  15. public function lewe_menu($przyciski)
  16. {
  17. ?>
  18. <table valign="top" border="1" width="100%">
  19. <?php
  20. for($i=0; count($this->przyciski) > $i ; $i++)
  21. {
  22. ?>
  23. <tr>
  24. <td align="center">
  25. <?php
  26. if($this->SprURL($przyciski) == $this->przyciski[$i])
  27. echo $przycisk_on;
  28. else
  29. echo "<a href=\"http://localhost\">".$this->przyciski[$i]."</a>";
  30. ?>
  31. </td>
  32. </tr>
  33. <?php
  34. }
  35. ?>
  36. </table>
  37. <?php
  38. }


Funkcja pierwsza SprURL($przyciski) powinna zwrócić jeden parametr (return $Przycisk_on). Dlaczego gdy wywołam ją w innej funkcji (chodzi tutaj o konstrukcje if, $this->SprURL($przyciski) == $this->przyciski[$i]) nie wysyła tego parametru, już późno być może mózg wysiada ;P ale nie wiem dlaczego tak jest, gdy funkcję zadeklaruje bez klasy wszystko jest OK, zostaje zwrócona wartość, dlaczego natomiast w klasie jest zupełnie inaczej?

Z góry dziękuje
Eldiane
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Zwróć uwagę na linie 26 i 27. W tej chwili skrypt nie wie, czym jest zmienna $przycisk_on i domyślnie nadaje jej wartość null. Po prostu nie przypisujesz zmiennej $przycisk_on wartości, jaką ma zwrócić funkcja SprURL(), co można zrobić w linii 26 w warunku:
  1. if(($przycisk_on = $this->SprURL($przyciski)) == $this->przyciski[$i])

Wszystko działa jak należy.

W wykryciu błędu mogło pomóc włączenie wyświetlania wszystkich błędów zgodnie z zaleceniami w tym temacie.
Go to the top of the page
+Quote Post
Eldiane
post
Post #3





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 6.01.2011
Skąd: Sosnowiec

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


  1. <?php
  2. $przycisk_on = $this->SprURL($przyciski);
  3. if($przycisk_on == $this->przyciski[$i])
  4. echo $przycisk_on;
  5. else
  6. echo "<a href=\"http://localhost\">".$this->przyciski[$i]."</a>";
  7. ?>


Zmieniając składnie na taką jaką podałeś nadal występuje błąd, zawsze przechodzi do warunku else... Tak jakby zmienna $przycisk_on była nadal wartością NULL (IMG:style_emoticons/default/thumbsdownsmileyanim.gif)
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Po wywołaniu tego:
  1. $przycisk_on = $this->SprURL($przyciski);

sprawdź, czym jest zmienna $przycisk_on:
  1. var_dump($przycisk_on);

Jeśli się okaże, że jej wartość to null, to przeanalizuj funkcję SprURL() sprawdzając przy tym zawartość $_SERVER['PHP_SELF'].
Swoją drogą funkcja SprURL() jest źle napisana, bo nie zwraca jakiejś domyślnej wartości, która niekoniecznie musi się znaleźć w tablicy $przyciski.

W ogóle całość jest do poprawy, bo logiki w tym nie ma żadnej. Na przykład obie funkcje korzystają z tej samej tablicy przycisków, więc po co je przekazywać, jako parametr.
Go to the top of the page
+Quote Post
bastard13
post
Post #5





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


Twoje przyciski to:
  1. public $przyciski = array('TWORZENIE_STRONY_OBIEKTY.php', 'Button2', 'Button3', 'Button4');

W metodzie SprUrl() masz warunek:
  1. if(strstr($_SERVER['PHP_SELF'], $przyciski[$i]))

A ze strony http://www.php.net/manual/en/function.strstr.php masz to co zwraca funkcja:
Cytat
Returns the portion of string, or FALSE if needle is not found.


Teraz już powinno wszystko być jasne.

A poza tematem to metoda SprUrl() powinna przyjmować i sprawdzać tylko jeden przycisk, ponieważ teraz w metodzie lewe_menu() wielokrotnie przechodzisz przez tablice $przyciski.
Dodatkowo, jeżeli zostawisz to tak, jak jest teraz to SprUrl() zawsze zwróci (o ile zwróci, bo w tym momencie jest to void) tą samą wartość.
Go to the top of the page
+Quote Post
Eldiane
post
Post #6





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 6.01.2011
Skąd: Sosnowiec

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


Dzięki wszystkim za pomoc, jeżeli wystąpią jeszcze jakieś problemy to się zgłoszę =]

//Edit użyłem funkcji strpos, ponieważ przeczytałem że działa ona troszeczkę szybciej od strstr, zawsze lepiej nauczyć się dobrych nawyków, teraz wszystko (chyba) działa już poprawnie, chodź wskazówki byłyby mile widziane (IMG:style_emoticons/default/smile.gif)

//Edit
Kolejna poprawka, nie chce robić nowych postów więc staram się wciskać wszystkie prace jakie dokonam w jednym temacie, dopóki nie zrobię tego dobrze. Teraz kolejne pytanie - jak nadać wartość zmiennym $przyciski public $przyciski_rek?

$Obiekt = new Strona();
$Obiekt->przyciski = array('Button1', 'Button2')
$Obiekt->przyciski_rek = array('Reklama1', 'Reklama2')

Nie daje pożądanego rezultatu, gdy napisze tak jak wyżej wartość zmiennej $tablica w funkcji URL jest wartością NULL (IMG:style_emoticons/default/thumbsdownsmileyanim.gif)

A oto sam kod:

  1. class Strona(){
  2. public $przyciski = array('Button1', 'Button2');
  3. public $przyciski_rek = array('Reklama1', 'Reklama2');
  4.  
  5. private function URL($tablica)
  6. {
  7. for($i=0; count($tablica) > $i ; $i++)
  8. {
  9. ?>
  10. <tr>
  11. <td align="center">
  12. <?php
  13. $link_true = strpos($_SERVER['PHP_SELF'],$tablica[$i]);
  14. if(!($link_true === false))
  15. echo $tablica[$i];
  16. else
  17. echo "<a href=\"http://localhost/Tworzenie_strony_obiekty/".$tablica[$i].".php\">".$tablica[$i]."</a>";
  18. ?>
  19. </td>
  20. </tr>
  21. <?php
  22. }
  23. }
  24.  
  25. public function lewe_menu($przyciski)
  26. {
  27. ?>
  28. <table valign="top" border="1" width="100%">
  29. <?php
  30. $przyciski = $this->przyciski;
  31. $this->URL($przyciski);
  32. ?>
  33. </table>
  34. <?php
  35. }
  36.  
  37. public function prawe_menu($przyciski_rek)
  38. {
  39. ?>
  40. <table valign="top" border="1" width="100%">
  41. <?php
  42. $przyciski_rek = $this->przyciski_rek;
  43. $this->URL($przyciski_rek)
  44. ?>
  45. </table>
  46. <?php
  47. }
  48. }


Z góry dziękuje.
Eldiane

Ten post edytował Eldiane 16.08.2011, 16:41:44
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: 24.08.2025 - 06:33