Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z klasą
Forum PHP.pl > Forum > Przedszkole
patryk9200
Cześć,
Mam problem, zbudowałem klasę za pomocą której chcę tworzyć strony, jest taki problem, że z niewiadomej mi przyczyny gdy dołączę ją do kodu strony to do przeglądarki dochodzi pusta strona bez niczego, natomiast gdy jej nie ma to wszystko jest ok.
  1. <?php
  2. class _Theme {
  3. public function Open($head = NULL, $title='..::ZS4 w Tychach::..')
  4. {
  5. echo '
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  7. <html>
  8. <head>
  9. <title>'.$title.'</title>
  10. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  11. <base href="http://www.zs4.tychy.edu.pl/new/">
  12. <link rel="stylesheet" type="text/css" href="'.THEME.'style.css" />
  13. <link href="'.THEME.'CSS/menu_dropdown.css" media="all" rel="stylesheet" type="text/css" />
  14. <link href="'.THEME.'CSS/menu_dropdown_vertical.css" media="all" rel="stylesheet" type="text/css" />
  15. <link href="'.THEME.'CSS/menu.css" media="all" rel="stylesheet" type="text/css" />
  16. <!--[if lt IE 7]>
  17. <script type="text/javascript" src="'.THEME.'JS/jquery.js"></script>
  18. <script type="text/javascript" src="'.THEME.'JS/menu_dropdown.js"></script>
  19. <![endif]-->
  20. <script LANGUAGE="JavaScript">
  21. var pictures = new Array(
  22. "'.THEME.'1.jpg"
  23. ,"'.THEME.'2.jpg"
  24. );
  25. var picture_num = 0;
  26. var current_picture = new Image();
  27. current_picture.src = pictures[picture_num];
  28. function start_show()
  29. {// Time is in seconds X 1000
  30. setInterval("slideshow()", 5000);}
  31. function slideshow()
  32. {
  33. picture_num++;
  34. if (picture_num == pictures.length)
  35. {
  36. picture_num = 0;
  37. }
  38. current_picture.src = pictures[picture_num];
  39. document["rotating_picture"].src = current_picture.src;
  40. }
  41. </script>
  42. '.$head.'
  43. <script type="text/javascript">
  44. function POMOC(obiekt,typ){
  45. obiekt.title=\'\'
  46. obiekt.parentNode.lastChild.style.display=typ?\'block\':\'none\'
  47. }
  48. </script>
  49. </head>
  50. <body OnLoad="start_show()">
  51.  
  52. <div id="general">
  53. <div id="logo_background">
  54. <div id="szybkie_wybieranie"><img src="images/lupa.png"></div>
  55. <div id="zdjecia"><div id="images"><img name="rotating_picture" src="1.jpg" width="300px" height="200px"></div> </div>
  56. <div id="szary_kwadrat"></div>
  57. </div>
  58. <div id="TOP">
  59. <div id="menu_top">
  60. <div id="txt">
  61. <ul id="nav" class="dropdown dropdown-horizontal" style="z-index: 500">'.BudujMenu().'
  62. </ul>
  63. </div>
  64. </div>
  65. <div id="szukaj">
  66. <form action="search.php?search=all" method="post">
  67. <table style="margin:2px;"><tr><td>
  68. <input id="TopSearch" type="text"
  69. value="Szukaj..."
  70. onfocus="if (this.value==\'Szukaj...\') { this.value=\'\'; }"
  71. onblur="if (this.value==\'\') { this.value=\'Szukaj...\'; }"
  72. name="Search"/></td><td>
  73. <input id="TopSearchButton" value=" " type="submit"></td></tr></table></form>
  74. </div>
  75. </div>
  76. <div id="left">';
  77. IncludedBox();
  78. }
  79.  
  80. public function OpenBox($title=NULL)
  81. {
  82. echo '<div id="box-content"><div class="top"><div class="title">'.$title.'
  83. </div></div><div class="mid"><div class="content">';
  84. }
  85.  
  86. public function CloseBox()
  87. {
  88. echo '</div></div><div class="bot"></div></div>';
  89. }
  90.  
  91. public function OpenLeftBox($title=NULL)
  92. {
  93. echo '<div id="box"><div class="top"><div class="title">'.$title.'
  94. </div></div><div class="mid"><div class="content">';
  95. }
  96.  
  97. public function CloseLeftBox()
  98. {
  99. echo '</div></div><div class="bot"></div></div>';
  100. }
  101.  
  102. public function OpenRightBox($title=NULL)
  103. {
  104. BoxRightStart ($title);
  105. }
  106.  
  107. public function CloseRightBox()
  108. {
  109. BoxRightEnd ();
  110. }
  111.  
  112. public function Close ($stopka='<div style="margin-left: 5px; margin-top: 0px; color:white;"><div style=" float: left;">Created by Patryk G. 2009 </div>Copyright by ZS4 Tychy 2009-'.date("Y").'<div style="margin-right: 5px; float: right;">Dzisiaj jest: '.date("Y-m-d H:i").'</div></div>')
  113. {
  114. echo'</div><div id="bottom">$stopka</div></body></html>';
  115. }
  116.  
  117. }

gdzie jest błąd?
[/php]
l3l0
  1. public function Close ($stopka='<div style="margin-left: 5px; margin-top: 0px; color:white;"><div style=" float: left;">Created by Patryk G. 2009 </div>Copyright by ZS4 Tychy 2009-'.date("Y").'<div style="margin-right: 5px; float: right;">Dzisiaj jest: '.date("Y-m-d H:i").'</div></div>')


nie możesz użyć funkcji jako wartość domyśnla funkcji parametru...

Wógole tak szczerze to klasa nie jest zbyt fajnie napisana, mógłbyś się zastanowić nad tym po co Ci tutaj klasa... to nie jest programowanie obiektowe
http://pl.wikipedia.org/wiki/Programowanie_obiektowe tutaj jest napisane na czym mogóle polega programowanie obiektowe.

Pozdrawiam
patryk9200
wiem co to obiektówka, po prostu mi klasą wygodniej się operuje, wcześniej miałem na funkcjach, ale dla mnie w formie klasy jest bardziej intuicyjne, już odkryłem ten błąd, mam teraz pytanie jak wywołać funkcję z poza klasy, wewnątrz funkcji w klasie ponieważ teraz jak mam tak zrobione to nie działa:
  1. function JakasFunkcja()
  2. {
  3. echo 'Funkcja';
  4. }
  5. class _Theme
  6. {
  7. public function Open ()
  8. {
  9. JakasFunkcja();
  10. }
  11. }
  12. $nowa = new _Theme;
  13. $nowa->Open();
l3l0
Ten kod działa... Jaką wersje PHP masz? I co to znaczy nie działa, nic się nie pojawia? Włącz raportowanie błędów.

Metody klasy wywołujesz w klasie przez
  1. $this->nazwaMetody();

funkcje wywołujesz w klasie przez:
  1. nazwaFunkcji();
Cysiaczek
@patryk9200 - Nie odbierz tego jako personalnego ataku, ani nie myśl, że oto wielki znawca przylazł i powiedział co wiedział...

Nie wyobrażam sobie zakodowania w ten sposób strony www, bo jest to niefunkcjonalne. Ta klasa jest po prostu zbędna, bo opakowuje treść, która sobie doskonale poradzi sama. To też nie jest podobne do helpera, bo helper wykonuje/generuje ściśle określoną rzecz - np. link czy obrazek.
Zupełnie poważnie proponuję Ci zapoznanie się z tym, co to jest Programowanie Zorientowane Obiektowo oraz w jaki sposób wykorzystuje się jego cechy w popularnych frameworkach. Jeśli piszesz publicznie, że wiesz co to OOP, a nie wiesz jakie konsekwencje niesie ze sobą Twój kod, to po prostu Ci nie wierzę :-)

Pozdrawiam
patryk9200
heh, bo widzisz według mnie kod powyższy powinien działać, wiem, że funkcję danej klasy można w niej wywołać w ten sposób $this->funkcja(); bo nawet to stosuję w systemie logowania, chodzi o to, że np. przy takiej klasie można stworzyć całą strone w paru linijkach np. tak:
  1. include THEME.'/theme.inc';
  2. $_theme = new _Theme;
  3. $_theme->Open(NULL,'Security Error-> wykryto potencjalną próbę włamania!');
  4. $_theme->OpenLeftBox('Tryb bezpieczny');
  5. echo 'Strona w trybie bezpiecznym';
  6. $_theme->CloseLeftBox();
  7. $_theme->Tresc();
  8. $_theme->OpenBox('Wykryto potencjalną próbę włamania!');
  9. System zabezpieczeń zgłosił próbę nieautoryzowanego dostępu do chronionych zasobów strony lub próbę wstrzyknięcia
  10. szkodliwego kodu.
  11. Pamiętaj, że każda prób włamania lub modyfikowania kodu strony jest rejestrowana i stanowi naruszenie prawa
  12. na mocy którego osoba dokonująca ataku może być ścigana i pociągnięta do odpowiedzialności karnej
  13. przewidzianej w kodeksie karnym.
  14. Jeżeli nie dokonywałeś żadnej próby włamania może to oznaczać błąd systemu. W tym wypadku
  15. powyższy zapis Ciebie nie dotyczy i możesz go zignorować.<br><b>
  16. The Security System detected a potential intrusion attempt!</b>';
  17. $_theme->CloseBox();
  18. $_theme->Close();

głównie o to chodzi, wywołanie klasy i operowanie na niej jest dużo przyjemniejsze, apropo stosowania frameworków to ja mam zasadę, że wolę sam do czegoś dojść i się nauczyć niż korzystać z gotowca, nie lubię iść na skróty, ewentualnie tylko podglądam budowę aby zapoznać się z innymi pomysłami tongue.gif

znalazłem przyczynę, przyczyną jest funkcja:
  1. function IncludedBox ()
  2. {
  3. MysqlStart ();
  4. $wynik = mysql_query("SELECT * FROM ".dbprefix."leftbox WHERE `show`=1 ORDER BY sequence ASC");
  5. MysqlEnd();
  6. while($box = mysql_fetch_array($wynik))
  7. {
  8. if ($box['included'] == 1)
  9. {
  10. include (INCLUDES.'BOX/'.$box['includepath']);
  11. } else
  12. {
  13. eval ($box['php']
  14. }
  15.  
  16. }
  17. }
co jest w niej źle? inne funkcje działają
darko
Cytat(patryk9200 @ 20.02.2010, 01:06:07 ) *
  1. function IncludedBox ()
  2. {
  3. MysqlStart ();
  4. $wynik = mysql_query("SELECT * FROM ".dbprefix."leftbox WHERE `show`=1 ORDER BY sequence ASC");
  5. MysqlEnd();
  6. while($box = mysql_fetch_array($wynik))
  7. {
  8. if ($box['included'] == 1)
  9. {
  10. include (INCLUDES.'BOX/'.$box['includepath']);
  11. } else
  12. {
  13. eval ($box['php']
  14. }
  15.  
  16. }
  17. }
co jest w niej źle? inne funkcje działają

Zgaduję, że to: eval ($box['php'] <-- brakuje zamykającego nawiasu (i średnika)
ps. ten Twój pseudoobiektowy kod to jakaś masakra...
patryk9200
bo to nie ma być pseudo-obiektówka, z resztą nie znasz dokładnie budowy a jej zasada działania tego wymaga, ja tylko wykożystuję elementy obiektówki aby ujednolicić część kodu, ten kod obsługuje stronę która częściowo ma podobną zasadę działania do np. php-fusion ale nie jest na niej wzorowana, na dodatek jeden kod=wiele stron strony są generowana na podstawie adresu, każdy może nadac takiej stronie własna grafikę itp. nie mogą to być elementy statyczne

a jeśli chodzi o niezamkniętą funkcje to jakis błąd podczas kopiowania, poprawny kod tak wygląda, też nie działa:
  1. function IncludeBox ()
  2. {
  3. MysqlStart ();
  4. $wynik = mysql_query("SELECT * FROM ".dbprefix."leftbox WHERE `show`=1 ORDER BY sequence ASC");
  5. MysqlEnd();
  6. while($box = mysql_fetch_array($wynik))
  7. { $_theme->OpenLeftBox($box['title']);
  8. if ($box['included'] == 1)
  9. {
  10. include (INCLUDES.'BOX/'.$box['includepath']);
  11. } else
  12. {
  13. eval ($box['php']);
  14. }
  15. $_theme->CloseLeftBox();
  16. }
  17. }
darko
hmm... ok winksmiley.jpg Czy zamiast $_theme->OpenLeftBox($box['title']); oraz $_theme->CloseLeftBox(); nie powinno być odpowiednio:
$this->OpenLeftBox($box['title']); oraz $this->CloseLeftBox();
?
patryk9200
Cytat(darko @ 20.02.2010, 13:26:13 ) *
hmm... ok winksmiley.jpg Czy zamiast $_theme->OpenLeftBox($box['title']); oraz $_theme->CloseLeftBox(); nie powinno być odpowiednio:
$this->OpenLeftBox($box['title']); oraz $this->CloseLeftBox();
?


to była pierwsza opcja jaka spróbowałem smile.gif ale nie działa niestety, postanowiłem, że zaimplementuję to poza klasą i bedę tylko dołączał do plików w końcu jedna linijka więcej mnie nie zbawi :-)

z resztą powinno zdaje mi się wywołać błąd albo wyświetlić tylko część kodu a dziwnym sposobem do przeglądarki nic nie do chodziło, nawet błędy;-)
darko
Cytat(patryk9200 @ 20.02.2010, 15:19:03 ) *
to była pierwsza opcja jaka spróbowałem smile.gif ale nie działa niestety, postanowiłem, że zaimplementuję to poza klasą i bedę tylko dołączał do plików w końcu jedna linijka więcej mnie nie zbawi :-)

z resztą powinno zdaje mi się wywołać błąd albo wyświetlić tylko część kodu a dziwnym sposobem do przeglądarki nic nie do chodziło, nawet błędy;-)

Dobra, co to jest $_theme i jaki jest zasięg tej zmiennej? (chodzi o widoczność w metodach klasy _Theme). Włącz raportowanie błędów.
patryk9200
Cytat(darko @ 20.02.2010, 15:28:34 ) *
Dobra, co to jest $_theme i jaki jest zasięg tej zmiennej? (chodzi o widoczność w metodach klasy _Theme). Włącz raportowanie błędów.


raportowanie błędów włączone i nic smile.gif ale inaczej to rozwiązałem myślę, że w moim wypadku będzie to bardziej użyteczne.
zrobiłem sobie osobny plik z kodem który wywoływałem w funkcji i go tylko dołączam, jednocześnie ścieżkę do niego zdefiniowałem w stałej więc teraz tylko dopisuję include(BOX); i mam :-)
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.