Allgemeine (und spezielle) Fragen zu OOP Webseitenerstellung in PHP

mita1982

Erfahrenes Mitglied
Hallo Froum,

seit einen halben Jahr beschäftige ich mich mit der Objektorienterter Programmierung in PHP 5.3.

Dazu habe ich mir das Buch "PHP 5.3 & MySql 5.1 von Galileo Computing" besorgt, und bin da auf generelle Fragen gestoßen.

In dem Buch wird eine art Grundgerüst genaut, wo mann dann das Grundgerüsst mit Klassen beliebig erweitern kann/soll.

Dort gibt es die Klasse HTML die public static Methoden besitzt.
doch die Klasse Blog zubeispiel hat keine statische Methoden Mehr.. Man muss dann Objekte Instazieren.
Da stellt sich mir die erste Frage.

Wann sollte man Objekte erstellen, und wann sollte man auf statische Methoden zugreifen wie HTML:: printHead();



Dann werden die im Buch beschriben Methoden als Funktionen erstellt die ein String als Rückgabewert haben.
so stzt man dann in der PHP Seite beispiel index.php "echo HTML:: printBody();".

Oder Es gibt den Ansatz, dass man auf Rückgabe verzecihtet und dann einfach mit echos in der Methode Arbeitet.
Besipiel in der Index Datei würde es so ausehn einfach HTML:: printBody();

Ich finde beide Ansatze Ärgerlich und Anstrengend da man den HTML Code dann mühleselig generiert Beispiel so:
Code:
echo '<body>'."\n;

bzw.

Code:
$output.='<body>'."\n;

Ist es da nicht sinnvoller die PHP Struktur zu unterbrechen und einfach HTML-Code einzugeben?

Wie händelt ihr das?

Und dann hätte ich ncoh eine Andere Frage

Wie Arbeitet ihr um ein Template zu erstellen? Was sind automatisierte Module?

Ich hoffe ihr könnt mir da ein wenig Helfen. Leider wird in den Buch nicht so auf Vererbung gesetzt was ja wirklich ein Merkmal der OOP ist. Aber ich finde es so auch einfacher...
Also mit der Konzeptionellen Art des professionellen Webcodens.. Zum Glück hat mich dieses Buch auf die Javascript Libary jQery gebracht, wo ich noch in einem Anderen Kontext lernen muss.. Danke An den Mod Maik an dieser Stelle..
 
Auch wenn ich es eigentlich nicht vor hatte, so muss ich dich auch darauf verweisen, dass es beim objektorientierten Programmieren auch Klassen gibt, die sowohl statische als auch nichtstatische Methoden enthalten. Beispielsweise bei Singletons (Objekte, die man nur einmal instanziieren kann und man danach immer auf die gleiche Instanz zugreift) erstellt man über eine statische Methode das Objekt, weil man bewusst den Konstruktor als private gekennzeichnet hat.
Man kann also den großen Unterschied zwischen statischen und nichtstatischen Methoden darin erkennen, dass statische Methoden direkt aufgerufen werden können, nichtstatische Methoden werden letztendlich direkt auf das Objekt angewendet, von dem aus man die Methode aufruft. Was weiterhin ein Unterschied ist, ist, dass man in statischen Methoden die klasseninterne Variable $this nicht verwenden kann, sondern nur self, was man aber auch in nichtstatischen Methoden aufruften kann. Somit kann man in $this Werte festlegen, die objektspezifisch sind, in self kann man objektübergreifende Werte festlegen.

Zu dem Templates: die meisten lösen das Problem damit, dass sie in den Templates kryptischen Code einfügen, denn sie dann später in PHP durch den entsprechenden Wert ersetzen. Das ist, wie ich meine, aber doch auf eine gewisse Art absurd, da man an dieser Stelle doch gleich die Variable einfügen kann, die den entsprechenden Wert enthält.

Zum Vergleich:
- so wie es viele handhaben:
PHP:
<h1>{$headline}</h1>
- wie ich es handhabe:
PHP:
<h1><?php echo $headline; ?></h1>
 
Zuletzt bearbeitet:
Ich muss ehrlich zugeben, dass ich nicht so viel verstanden habe...

also fügst Du dynamische inhalte in statische html tags ein? und generierst nicht den Code wie ich es mache echo"<tag>"; bzw. $string.="<tag>";

gibt es einen nachteil.. wenn man die tags rein in html schreibt?

Ihc finde so kannman den html Markup dann viel besser formatieren..
 
Also ich arbeite auch hauptsächlich mit Templates, da ich das Generieren von HTML-Quelltext in PHP bescheuert finde. Es gibt einige Sachen, da muss man es so handhaben, aber in den meisten Fällen belastet es nur die Leistung und die beeinflusst die Geschwindigkeit in der die Seite geladen wird. Also sollte man doch eher versuchen PHP von HTML zu trennen. Kurzum: ich schließe mich deiner Meinung an.
 
Also ist sowas hier eine Art Template?

Und es geht auf den richrigen Weg

PHP:
<?php
  session_start();
  require_once('classes/settings.php');
  require_once('classes/DBConnection.php');
  require_once('classes/HTML.php');
//CAPTCHA prüfung
  require_once('securimage/securimage.php');
  $securimage = new Securimage();

  if (isset($_POST['send']) && 
	isset($_POST['name']) && 
	isset($_POST['email']) && 
	isset($_POST['message']) &&
	isset($_POST['subject']))
{ 	
	if ($securimage->check($_POST['captcha_code']) == false) 
	{
 		// the code was incorrect
 		// handle the error accordingly with your other error checking

	 	// or you can do something really basic like this
		echo '<script language="javascript">alert("The code you entered was incorrect.");</script>';
	}
	else
	{
		$sender = $_POST['email'];
		$empfaenger = "info@vrc-racing.com";
		$betreff = $_POST['subject'];
		
		$mailtext = 
		'<html>
			<head>
  				<title>'.$betreff.'</title>
			</head>
			<body>
  				<p>Name: '.$_POST["name"].'</p>
  				<p>E-Mail: '.$_POST["email"].'</p> 
				<p>'.$_POST["message"].'</p>
  			</body>
		</html>';

// für HTML-E-Mails muss der 'Content-type'-Header gesetzt werden
$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// zusätzliche Header
$header .= 'To:<'.$empfaenger.'>' . "\r\n";
$header .= 'From: '.$_POST["name"].' <'.$_POST["email"].'>' . "\r\n";
$header .= 'Cc: bener1hannover@hotmail.com' . "\r\n";
$header .= 'Bcc: mista1982@googlemail.com' . "\r\n";
		
		 
		
		mail($empfaenger, $betreff, $mailtext, $header);
		echo '<script language="javascript">alert("Thank you! \n \n The email was send sucsefully!"); location.href = "/test/index.php"; </script>';
 		exit;
	}    
}
  
  
  
//--------------------
  	HTML::printHead();
?>  	
<?  	
 	HTML::printBody();

?>
<div id="contact">
		<h1><?= $_SESSION['language']==1 ? 'Kontakt' : 'Contact Us' ?></h1>
		<br />
		<form method="post" action="#">
		<p><?= $_SESSION['language']==1 ? 'Ihr Name*' : 'Your Name*' ?></p>
		<p><input type="text" class="inputtext" id="idName" name="name" onblur="validateName();" value="<? if (isset($_POST['send']) && isset($_POST['name'])) echo $_POST['name'];?>" />
		<img class="failimg" id="failname" src="http://www.tutorials.de/forum/images/empty.png" alt="empty"  /></p>
		<p><?= $_SESSION['language']==1 ? 'Ihre E-Mail* (wird nicht ver&ouml;ffentlicht)' : 'Your E-mail* (will not be published) ' ?></p>
		<p><input type="text" class="inputtext" id="email" name="email" onblur="validateEmail();" value="<? if (isset($_POST['send']) && isset($_POST['email'])) echo $_POST['email'];?>" />
		<img class="failimg" id="failmail" src="http://www.tutorials.de/forum/images/empty.png" alt="empty" /></p>
		<p><?= $_SESSION['language']==1 ? 'Betreff' : 'Subject' ?></p>
		<p><input type="text" class="inputtext" name="subject" value="<? if (isset($_POST['send']) && isset($_POST['subject'])) echo $_POST['subject'];?>" /></p>
		<p><?= $_SESSION['language']==1 ? 'Ihre Nachricht' : 'Your Message' ?></p>
		<p><textarea rows="10" id="idMessage" name="message" onblur="validateMessage();" cols="40"><? if (isset($_POST['send']) && isset($_POST['message'])) echo $_POST['message'];?></textarea></p>
		<p><img class="failimg" id="failmessage" src="http://www.tutorials.de/forum/images/empty.png" alt="empty" /></p>
		<div id="captcha_rahmen">
		<p><?= $_SESSION['language']==1 ? 'Spamschutz*' : 'Seccurity image*' ?></p>
		<p><img id="captcha" src="securimage/securimage_show.php" alt="CAPTCHA Image" /></p><a href="#" style="float:left;" onclick="document.getElementById('captcha').src = 'securimage/securimage_show.php?' + Math.random(); return false"><img class="refresh" src="securimage/images/refresh.gif" alt="refresh" /></a>
		<p style="float:left;"><?= $_SESSION['language']==1 ? 'Bitte den Code eingeben ' : 'Enter the code ' ?></p><p style="float:left;"><input class="captcha" type="text" name="captcha_code" size="10" maxlength="6" /></p>
		</div>
		<table style="width:630px; margin-top:10px; margin-right:15px; margin-bottom:15px">
			<tr>
				<td><p><input id="btn_email" type="submit" name="send" value="<?= $_SESSION['language']==1 ? 'Nachricht senden' : 'Send message' ?>" ></input></p></td><td class="caputure_pflichtfelder"><p><?= $_SESSION['language']==1 ? '*Pflichtfelder' : '*Required fields' ?></p></td>
			</tr>
		</table>
	</form>
</div>
<?php 	
  HTML::printFoot();
?>
 
Wenn du dein Skript noch etwas aufräumst, dann sieht das Ganze doch schon recht nett aus. Kann leider nicht mehr dazu sagen, da ich nicht weiß, was die einzelnen Objekte tätigen und wie sie aufgebaut sind.
 
Inwieweit meinst Du das mit den "Aufräumen"?

und die Objekte? naja es gibt ja nur Statische methoden, der HTML Klasse.. Dort wird in printHead() der Anfang von head und Grundgerüst geschrieben sowie die ganzen Scripte und Stylesheats geladen...

die Methode printBody die gesammten Divs bis zum content.. und printfoot() schließt einige Divs das Body und Html Tag..

Jetzt stellt mich die Frage, wie ich die einzelnen HTML Methoden handhaben soll.. also mit Rückgabe eines Strings? in der Methode Selber mit echo ausgeben oder wie ich meine :

PHP:
public static function printBody(){
?>
   <body>
     <div id="container">
        <div id="content">
<?
}

Das Beispiel Obne ist natürlich vereinfacht..

Kurz eine OffTopic Frage: Mit welcher IDE kann man php Produkiv debuggen? Also den code den man geändert hat auf ein webserver laden und gleich debuggen?
Eclipse PDT? Nebeans PHP?
 
Ich habe früher mit Dreamweaver gearbeitet, aber seit dem ich auf Mac umgestiegen bin nutze ich Xcode (das ist nicht explizit für PHP gedacht, aber funktioniert) und lade meine Daten mit Cyperduck hoch, wenn nötig. Ansonsten läuft das alles über meinen localhost.
 
verscuhe grade mit netbeans zu debuggen auf localhost aber irgendwie kommt immer ne meldung, dass xdebug nicht konfiguriert ist oder so.. naja anderes thema.. ich möchte dich nochmal bitten, meine oben erwähnte Frage zu beantworten ob man quasi in den Methoden php mit
?>
abrricht und HTML Markup schreibe und gegebenfals mit <?= phpcode ?> einsetze und dann wieder die methode mit <? } abzuschließen?
 
Ich weiß nicht, ob das möglich ist. Aber ich weiß, dass man HTML-Seiten mit include, include_once, require und require_once innerhalb von Methoden einladen kann und diese dann als Ausgabe an den Browser verstanden werden, könntest du es einfach mal probieren. Wäre mal interessant zu erfahren, ob das möglich ist.
 
Zurück