[OOP] AUs einer Funktion mehrere Variablen rauslassen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [OOP] AUs einer Funktion mehrere Variablen rauslassen

    Morgen zusammen,

    ich häng heut shcon wieder seit zwei Stunden an meinen Scripten rum, da muss endlich mal wieder was vorwärts gehn^^

    So, zu meinem Problem:

    Ich arbeite z. Z. daran ein paar Teile in OOP zu ändern. Ich bin jetzt gerade bei den News. Diese werden alle aus einer Datenbank gelesen, auf der news.php in einer Liste angezeigt, und dann per ?id= einzeln angezeigt.

    In der Datei news.php steht lediglich das:

    Quellcode

    1. <?php
    2. [...]
    3. $news_id = $_GET['id'];
    4. if (isset($news_id))
    5. {
    6. System\News::display_once_news ($mysqli, $access, $user5);
    7. }
    8. else
    9. {
    10. $seiten_inhalt = System\News::display_news_list($mysqli);
    11. $seitentitel = "News";
    12. $tab_titel = "";
    13. }
    14. user_last_aktion($mysqli, $user, $tab_titel);
    15. System\HTML::printHead($access->zugang_check_tab_titel($user5, "news_see", $tab_titel."News"), $config, "");
    16. System\HTML::printBody($config);
    17. System\HTML::printNavigation($config, $user, $mysqli, $access, $user5);
    18. System\HTML::printWerbung($config);
    19. System\HTML::printHeadline($access->zugang_check_seitentitel($user5, "news_see", $seitentitel), $config);
    20. System\HTML::printInhalt($access->zugang_check_seite($user5, "news_see", $seiten_inhalt), $config);
    21. System\HTML::printFoot("standart", $config, $mysqli, $access, $user5);
    22. ?>
    Alles anzeigen


    Der else-Teil der des if-Blocks ist die Liste mit allen News, also die aufzurufende Funktion.
    Der andere Teil ist die einzelne News, die angezeigt werden soll.
    Jetzt habe ich folgendes Problem:
    Ich kann nicht wie im else-Block einfach "$seiten_inhalt = System\News::display_once_news ($mysqli, $access, $user5);" machen, weil ich in der Funktion 3 Variablen hab, die ich benötige.
    Geht das nicht irgendwie, dass die Variablen einfach zur Verfügung stehn, wie als würde die Funktion selbe rin der Datei stehn, anstatt der Aufruf zur Funktion?
    Das nervt mich jetzt ehrlich gesagt langsam schon wieder...

    LG

    Fipsi
  • Bist du dir sicher das hat was mit OOP zu tun? Das schaut mehr nach einem auslagern in statische Funktionen aus. Nur weil alles in Klassen aufgeteilt ist, ist es nicht automatisch OOP!

    So ganz kann ich dein Problem auch nicht nachvollziehen. Du möchtest nicht alles als Parameter übergeben?

    ps.
    Dein Denglisch ist gruselig 8|
  • vince schrieb:

    ps.
    Dein Denglisch ist gruselig 8|


    Sorry dafür^^

    also ich hab ja schon 3 parameter übergeben, die der braucht umd zu wissen, was er aus der bd holen soll. macht er auch schön brav, bla, bla.
    Der komplette Seiteninhalt wird in einer Variable $seiten_inhalt gespeichert. Der Seitentitel in $seitentitel, und das, wa sin der Tab-leiste steht in $tab_titel. Diese drei Variablen brauch ich jetzt aber außerhalb der Funktion, damit die Seite angezeigt werden kann. Mit return kann ich ja nur einen Teil zurückschmeißen, dannf helen ncoh die anderen beiden. Habs schon mti nem Array probiert, funktioniert genauso wenig.

    Und zum OOP:
    aso, ok... dachte jetzt nur, weils eig. aufgebaut is wie OOP... aber auch gut, dann halt nicht^^
  • Das benutzen von Klassen != OOP. Du arbeitest mehr in die prozedurale Richtung.

    Deine ganzen Parameterübergaben sind alle redundant, warum nicht einmal als Klassenvariable?
    Warum X verschiedene Printmethoden und nicht 1?

    Quellcode

    1. $html = new HTML($config, $mysql, ....);
    2. $html->print(PrintEnum::Head, $access );
    3. $html->print(PrintEnum::Body);
    4. ...


    Anmerkung:
    PHP kennt keine Enums, aber ein Workaround als Klasse mit const wäre durchaus möglich.


    Ist der Ausschnitt den man dort sieht, der Inhalt einer Methode? Wenn ja, dann speicherst du $seiten_inhalt, $seitentitel und $tab_titel in Klassenvariablen und greifst einfach über die Klasse von aussen darauf zu.

    Ich würde dir aber raten, dich wirklich mit OOP zu beschäftigen. Schau dir auch mal das MVC-Konzept an, das ist nicht unbedingt für den Einstieg geeignet, aber ein Blick lohnt sich.
  • Hmm also ich hab auch nicht den Eindruck das es nach OO ausieht eher nee samlung von Funktionen die Statisch aufgerufen werden.
    Auch die Parameter Anzahl scheint mir unötig hoch zu sein. Du versucht eben alles in jeder Funktion zu übergeben.
    Statt eben Methoden und Objekte zu nutzen.

    Beschreibung was du nun von uns wissen willst ist auch sehr wage. Du versucht uns einen nicht nachvoll ziehbaren Lösung weg vorzugeben.
    Und fragst dann wie mann das Umsetzen kann.

    Sieht im ganzen eben aus als were da mehr duchreinander als sinvoll genutzt.

    Mfg Splasch
  • So...

    also ich hab jez nach meinem Urlaub und ner kurzen keine-Lust-Phase angefangen, das in "$html = new HTML();" umzubauen.

    Auf meinem localhost funktioniert das jetzt nach gut 3 Stunden umbau reibungslos (ja, ich hab mcih etwas angestellt, ich weiß), und hab das nun auf meinen Server hochgeladen. Ergebnis: weiße Seite. Danke.
    Ich hab dann error_reporting(E_ALL); eingeschrieben, immernoch weis. Ich denke mal, das liegt an der php.ini. Ich hab die Datei gesucht und 3 oder 4 gefunden. Bei allen auch error_Reporting und alle error-einstellungen auf on gestellt: immernoch weis.
    Kann mir jemand sagen, wie ich so ne Fehlermeldung krieg?
    Danke schonmal
  • ich könnt grad echt heuln. Ich versuch gerade, das wie von vince vorgeschlagen:

    $html = new HTML($config, $mysql, ....);
    $html->print(PrintEnum::Head, $access );
    $html->print(PrintEnum::Body);

    einzubinden.. funktioniert soweit, nur das mit "$html = new HTML($config, $mysql, ....);" will nicht. Wenn ich die Variablen in die klammern schreib, bei den Objectaufrufen rauslösch, in der Klassen-datei bei den Objecten ebenfalls diese Parameterangaben rauslösch, hauts mir mein ganzes Skript zusammen. Funktioniert garnichts mehr. Wenn ich in der Klassendatei die Parameterangaben drin lass, meckert er, weil sie beim aufruf nicht vorhanden sind. Kann mir bitte jemand sagen, wie das dann funktioniert? hab meinen php-wälzer grad danach durchgesucht, nichts gefunden.

    Vielen Dank schonmal.
  • Fipsi schrieb:


    einzubinden.. funktioniert soweit, nur das mit "$html = new HTML($config, $mysql, ....);" will nicht. Wenn ich die Variablen in die klammern schreib, bei den Objectaufrufen rauslösch, in der Klassen-datei bei den Objecten ebenfalls diese Parameterangaben rauslösch, hauts mir mein ganzes Skript zusammen. Funktioniert garnichts mehr. Wenn ich in der Klassendatei die Parameterangaben drin lass, meckert er, weil sie beim aufruf nicht vorhanden sind. Kann mir bitte jemand sagen, wie das dann funktioniert? hab meinen php-wälzer grad danach durchgesucht, nichts gefunden.


    hi,

    könntest du Auszüge aus deinem Code posten? So ganz kann ich dir nicht folgen, was du genau machst. Interessant sind deine Konstuktoren, Klassenvariablen und deine Aufrufe die du tätigst.
  • ok..des sind n paar zeilen ^^

    also ich nehm jez mal als beispiel einfach die index-seite:

    Quellcode

    1. <?php
    2. error_reporting(0);
    3. session_start();
    4. define('IN_FISW',True);
    5. define('ROOT_PATH', "./");
    6. require(ROOT_PATH."data/templates/includes.php");
    7. $html = new HTML();
    8. $link_index_edit = "<div id=\"rechts\"><a href=\"adm/edit.php?do=index\">Startseite ändern</a></div>\n";
    9. $seiten_inhalt = $access->zugang_check_link($user5, "index_edit", $link_index_edit);
    10. $datei = fopen(ROOT_PATH."data/templates/txt/index.txt", "r");
    11. while ($inhalt = fgets($datei))
    12. {
    13. $seiten_inhalt .= nl2br($inhalt);
    14. }
    15. fclose($datei);
    16. $seitentitel = "Herzlich Willkommen";
    17. $tab_titel = "Startseite";
    18. user_last_aktion($mysqli, $user, $tab_titel);
    19. $html->header ($config, $access->zugang_check_tab_titel($user5, "index_read", $tab_titel), "");
    20. $html->body ($config);
    21. $html->navigation ($config, $user, $mysqli, $access, $user5);
    22. $html->werbung ($config);
    23. $html->headline ($config, $access->zugang_check_seitentitel($user5, "index_read", $seitentitel));
    24. $html->inhalt ($config, $access->zugang_check_seite($user5, "index_read", $seiten_inhalt));
    25. $html->footer ("standart", $config, $mysqli, $access, $user5);
    26. ?>
    Alles anzeigen


    das is dann die klasse dafür:

    Quellcode

    1. class HTML
    2. {
    3. /**
    4. * Kontrolliert, ob die Website aktiv ist
    5. *
    6. */
    7. public static function website_aktiv ()
    8. {
    9. return true;
    10. }
    11. /**
    12. * Erstellt den Kopf des HTML-Documents
    13. *
    14. */
    15. public static function header ($config, $titel_seite, $css)
    16. {
    17. header("Content-Type: text/html; charset=utf-8");
    18. echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"."\r\n";
    19. echo "<html>\r\n";
    20. echo "<head>\r\n";
    21. if (self::website_aktiv() == true)
    22. {
    23. echo "<title>".bbcode($titel_seite)." - ".bbcode($config["website_titel"])."</title>\r\n";
    24. }
    25. else
    26. {
    27. echo "<title>Diese Seite ist deaktiviert - ".bbcode($config["website_titel"])."</title>\r\n";
    28. }
    29. echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\r\n";
    30. echo "<meta name=\"content-language\" content=\"de\" />\r\n";
    31. echo "<meta name=\"author\" content=\"Phillip Seelig\" />\r\n";
    32. echo "<meta name=\"publisher\" content=\"Phillip Seelig\" />\r\n";
    33. echo "<meta name=\"copyright\" content=\"Phillip Seelig\" />\r\n";
    34. echo "<meta name=\"keywords\" content=\"\" />\r\n";
    35. echo "<meta name=\"description\" content=\"".$config['website_beschreibung']."\" />\r\n";
    36. echo "<meta name=\"language\" content=\"Deutsch\" />\r\n";
    37. echo "<meta name=\"revisit\" content=\"After 30 days\" />\r\n";
    38. echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"".ROOT_PATH."data/templates/css/main.css\" />\r\n";
    39. echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"".ROOT_PATH."data/templates/css/weiss.css\" />\r\n";
    40. if (!empty($css))
    41. {
    42. echo "<link rel=\"srylesheet\" type=\"text/css\" href=\"".ROOT_PATH."data/templates/css/".$css.".css\" />\r\n";
    43. }
    44. }
    45. /**
    46. * Erstellt den Körper des HTML-Dokuments
    47. *
    48. */
    49. public static function body ($config)
    50. {
    51. echo "</head>\r\n";
    52. echo "<body>\r\n";
    53. echo "<div id=\"header\">\r\n";
    54. if (!empty($config["name_header_pic"]))
    55. {
    56. echo "<div id=\"header_pic\"><img href=\"".ROOT_PATH."\" src=\"data/style/pic/templates/".$config["name_header_pic"]."></div>\r\n";
    57. }
    58. echo "<div id=\"header_titel\">".bbcode($config["website_titel"])."<br />\r\n";
    59. echo bbcode($config["website_beschreibung"])."</div>\r\n";
    60. echo "</div>\r\n";
    61. echo "<div id=\"main_part\">\r\n";
    62. }
    63. /**
    64. * Erstellt die Überschrift
    65. *
    66. */
    67. public static function headline ($config, $headline)
    68. {
    69. echo "<div id=\"inhalt_background\">\r\n";
    70. echo "<div id=\"inhalt_text\">\r\n";
    71. echo "<br />\r\n";
    72. echo "<div id=\"headline\">";
    73. if (self::website_aktiv() == TRUE)
    74. {
    75. echo bbcode($headline);
    76. }
    77. else
    78. {
    79. echo "Diese Website ist deaktiviert.";
    80. }
    81. echo "</div><br /><br />\r\n";
    82. }
    Alles anzeigen

    [...]
    bis halt alles durch is.

    Das war jez alles, was du sehn wolltest, oder...?^^

    P.S.: Warum sind die Syntax-bb-codes nimmer da..?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fipsi ()