Klasse

  • Themenstarter Themenstarter joky_joky
  • Beginndatum Beginndatum
OK, die unvollständigkeit ist natürlich ein Grund. ;)
Wenn Du unter http://de.php.net/my.php als "Mirror site redirect" "de2.php.net" einstellst, sollte deine Suche auf www.php.net eigentlich auch auf de2.php.net umleiten.
Als "Your preferred language" kannst Du ja "English" eingestellt lassen.
Ich habe zwar prinzipiell kein Problem damit den Link umzuschreiben, aber nervig ist es trotzdem irgendwie. ;)
 
Dr Dau hat gesagt.:
Also vom Verständnis würde ich jetzt sagen dass vor check_get noch ein function muss, oder hat dass funtion nur ein "Schönheitsaspekt"?
Vollkommen richtig, da muss das function noch hin. Ich editiers grad mal ... *im Boden versink vor scham ^^*
War halt irgendwie schon fast halb 4, da sinkt meine geistige Leistung etwas.
Schön, dass mir nach so langer Zeit auch mal wieder ein Syntaxfehler unterläuft :D
 
Um dir noch einmal den Sinn einer Funktion und Klasse nahe zu bringen: Funktionen werden oder sollten immer dann eingesetzt werden, wenn sich gewisse Algorithmen innerhalb eines Skriptes wiederholen oder wiederholen könnten. Ein schönes Beispiel, das dir sicher auch schon unter die Augen gekommen ist, ist das Absenden einer Datenbankabfrage, die mit integrierter Fehlerbehandlung wie folgt aussehen könnte:
PHP:
<?php

	…
	$result = mysql_query($query, $link)
		or die('<p><strong>Datenbankabfrage schlug fehl ('.mysql_errno().'):</strong> '.htmlspecialchars(mysql_error()).'</p><pre>'.htmlspecialchars($query).'</pre>');
	…

?>
Sobald an diesem Algorithmus nichts geändert wird, kann er eigentlich problemlos immer wieder kopiert werden. Doch sobald du dich beispielsweise entscheidest, etwas zu ändern, fangen die Probleme an, da jede Instanz dieses Algorithmuses geändert werden muss – was bei mehreren Skriptdateien durchaus frustrierend sein kann.
Besser wäre es in diesem Fall eine zentralisierte und standardisierte Funktion zu nutzen, beispielsweise folgende:
PHP:
<?php

	function foobar($query, $link)
	{
		$result = mysql_query($query, $link)
			or die('<p><strong>Datenbankabfrage schlug fehl ('.mysql_errno().'):</strong> '.htmlspecialchars(mysql_error()).'</p><pre>'.htmlspecialchars($query).'</pre>');
		return $result;
	}

	…

	$result = query($query, $link);

	…

?>
Überlegst du dir nun, statt die Fehlermeldungen direkt auszugeben sie in einer Log-Datei zu speichern, da der Endbenutzer damit sowieso nichts anfangen kann, ist dies dank der zentralen Funktion eine Leichtigkeit.
 
@Irgendjemand_1, kann passieren. ;)
Aber was ist hiermit?
Dr Dau hat gesagt.:
.....Ausserdem stelle ich mir jetzt die Frage wo $var herkommt, müsste diese Variable nicht vorher mit $var=$_GET['xyz']; definiert werden?.....
@Gumbo, mir ist schon klar dass Funktionen erst dann wirklich Sinn machen, wenn man sie mehrfach verwenden kann.
Darum würde ich sie ja auch gerne verstehen wollen.
 
Dr Dau hat gesagt.:
@Irgendjemand_1, kann passieren. ;)
Aber was ist hiermit?
.....Ausserdem stelle ich mir jetzt die Frage wo $var herkommt, müsste diese Variable nicht vorher mit $var=$_GET['xyz']; definiert werden?.....
Klar.
Und zwar beim Aufruf:
check_get($_GET['xyz'])
Die Funktion übernimmt diesen Parameter als $var und arbeitet damit.
Du kannst da jetzt jede beliebige Variable reinsetzen.

Btw: Funktionen machen auch sinn, wenn man was rekursiv lösen will, das hat stil :)
 
Naja das mit den Funktionen und den Variablen übergaben ist eigentlich recht simpel :)

PHP:
function foobar($Spielzeug=""){
   if(empty($Spielzeug)){
         $Spielzeug = "Ball";
     }

   return "Mein Lieblings Spielzeug ist ein".$Spielzeug;

}

echo foobar();
echo foobar("Würfel");
echo foobar("Brotkanten");
echo foobar("toter Iltis");

$Spielzeug nimmt das an was Du der Funktion foobar übergibst , dabei setzen wir uns die Variable Spielzeug schon so das es leer ist quasi. Das heisst selbst wenn nix an die Funktion übergeben wird hat Spielzeug einen Wert der leer ist.

Wenn man schreiben würde
PHP:
 function foobar($Spielzeug)
     {
        ......
    } 

foobar();  // erzeugt eine Fehlermeldung
foobar("Ball") // Variable $Spielzeug bekommt den Wert Ball

Würde man sofort eine Fehlermeldung an den Kopf geknallt bekommen wenn man der Funktion keinen Wert übergibt und zum Abschluss einen Fatal Error denk ich.

Mehere Variablen gehen natürlich auch

PHP:
function foobar($Spielzeug="", $Ort =""){

     if(empty($Spielzeug)){
           $Spielzeug = "Ball";
       }
      
     if(empty($Ort)){
           $Ort = "Fussballplatz.";
      }

     return "Ich spiele gerne mit meinen ".$Spielzeug." auf dem ".$Ort."<br>";
}

echo foobar();
echo foobar("Brotkanten");
echo foobar("","Dach eines gewaltigen Hochhauses.");
echo foobar("toten Iltis","Dach eines gewaltigen Hochhauses.");

Und noch ein letztes. Wenn du Variablen ausserhalb einer Funktion definierst sie aber doch gerne mit in der Funktion haben möchtest setzt die Variable global $var.

PHP:
$Eis1 = "Erdbeere";
$Eis2 = "Zitrone";

function foobar(){
global $Eis2;

echo "ich esse gerne ".$Eis1; 
// Fehlermeldung da Variable nicht innerhalb der Funktion definiert ist
echo "Ich esse gerne ".$Eis2; 
//funktioniert da $Eis2 innerhalb der Funktion gültig ist
}

foobar();

Wobei ich glaube das Variablen die innerhalb der Funktion festgelegt werden nicht ausserhalb der Funktion gültig sind , ob es dann mit global $vari geht kann ich nicht genau sagen nun spontan.

Da mir irgendwas mein System zerballert hat gestern und ich immer noch so nen Drecks Virus drauf habe, den ich momentan nicht löschen kann (nicht mal im abgesicherten Modus) :(
Und PHP immer noch nicht installiert habe :/

Windows Stinkt !
 
Zuletzt bearbeitet:
Hmm, sicher bin ich mir zwar nicht, aber ich glaube so langsam zu verstehen.
Müsste ich mal in der Praxis testen, wenn mein Server wieder einsatzfähig ist.
Auf jedenfall bedanke ich mich erstmal bei euch für die viele Erklärungen. :)

Aber was ist mit dem Threadersteller?
Der hat sich ja noch nicht wieder zu Wort gemeldet.
 
Also ich habe jetzt das mit den Klassen verstanden und mir ist nach diesen Vielen Beispielen und Erläuterungen des Sinn der Klasse verständlich geworden.
Vielen Dank.
 
@DrDau:

Ich hab auch ewig gebraucht bis ich das gecheckt hab, und witzigerweise hab ichs durch JavaScript schneller verstanden als durch PHP. (in JS sind ja Funktionen auch sehr praktisch, vor allem in externen Dateien :-) ;) )

Ich nehme mal folgenden Code als Beispiel:

PHP:
function check_get ($var) { // Hoffe das gibts noch nicht die Funktion :-) 
  if (isset($var)) { 
    if (!empty($var)) { 
      return true; 
    } 
  } 
  return false; 
}

Zum Problem wo $var herkommt:
$var dient im Großen und Ganzen beim erstellen der Funktion nur als Platzhalter. In diese Variable kommt dann das Attribut, das übergeben wird um damit in der Funktion zu arbeiten.

Also wenn wir die Funktion mit $_GET['dingsbums'] ausführen

PHP:
if(check_get ($_GET['dingsbums']) == true){
     //machwas und freu dich
}

Dann macht die Funktion folgendes:
PHP:
 $var=$_GET['dingsbums'];
 if (isset($var)) { 
    if (!empty($var)) { 
      //check_get ($_GET['dingsbums']) = true
    }else{
      //check_get ($_GET['dingsbums']) = false
    }
  } 
  else{
    //check_get ($_GET['dingsbums']) = false
  }
 
@nero_85, ich verabscheue JS, darum habe ich diesbezüglich auch keine Möglichkeiten damit "zu üben". ;)
Wie gesagt, ich glaube dass ich es nun verstehe (zumindest schonmal ansatzweise)..... damit kann ich mich aber erst befassen, wenn ich irgendwann mal die Zeit finde mich um meinen Server zu kümmern.
 
Zurück