ReLast - Klassik


PHP


Allgemein

Einbinden

Der PHP-Interpreter wertet alles aus was zwischen <?php und ?> steht.

<?php ... ?>

Die alternative Kurzform <?= $variable ?> ist äquivalent zu <?php echo $variable; ?>

<?= $variable ?>

PHP-Code kann an beliebiger Stelle notiert werden. Der PHP Code wird ausgewertet, das Ergebnis an der Stelle in das HTML-Dokument eingefügt und das fertige Dokument an den Browser gesendet.

<html>
	<head>
		...
		<?php ... ?>
		...
	</head>
	<body>
		...
		<?php ... ?>
		...
	</body>
</html>

Kommentare

<?php 
// einzeiliger Kommentar
/* 
 mehrzeiliger Kommentar
 */
?>

Hallo Welt

<?php echo "Hallo Welt!"; ?>

Datentypen

Integer

$i = 1;
$i = 1.5;

String

Strings gibt es in einfachen und in doppelten Anführungszeichen ('...' und "..."). Einfache Anführungszeichen begrenzen den String so wie er ist. Doppelte Anführungszeichen werten Variablen innerhalb des String aus. Beides hat seine Vor- und Nachteile.

$text = 'geheim';
echo '$text enthält '.$text; // ergibt: $text enthält geheim
echo "$text enthält {$text}"; // ergibt: geheim enthält geheim 

Array

Erzeugen:

$beispiel = array();

Elemente hinzufügen kann man implizit oder explizit:

$beispiel[] = "neues Element"; // schneller, aber unordentlicher da implizit
array_push($beispiel, "neues Element"); // langsamer, aber ordentlicher da explizit

Hash

Ein Hash ist hervorragend geeignet um Werte nachzuschlagen. Sozusagen ein kleines Wörterbuch.

$minion = array('purple' => 'bad', 'yellow' => 'good');
$found_minion_with_color = 'yellow';
echo "Your Minion is a {$minion[$found_minion_with_color]} Minion";
$found_minion_with_color = 'yellow';
echo "Your Minion is a {$minion[$found_minion_with_color]} Minion";

Klassen und Objekte

static: Erlaubt statische Funktionen und Variablen, die dann ohne Objekt erreichbar sind.

final: Erlaubt keine Erweiterung in abgeleiteten Klassen. Ist die Klasse final ist keine Ableitung möglich.

public, private und protected: Eenn keine Deklaration dann public.

  • public: für alle sichtbar
  • private: für eigene Objekte sichtbar
  • protected: für eigene und abgeleitete Objekte sichtbar
class fubar {
	
	private $variable = "Rumpelstielzchen";
	
	public function __construct($variable) {
		$this->variable = $variable;
		$this->zeige();
	}
	
	public function __destruct() {
		$this->geheimfunktion();
		$this->zeige();
	}
	
	private function geheimfunktion() {
		$this->variable = "Wieder Rumpelstielzchen, hihi"
	}
	
	public function zeige() {
		echo $this->variable;
	}
	
}
$trickkiste = new fubar("Rotkäppchen"); 

Vererbung

class RumpelsKinder extends fubar {
}
class RumpelsKinder extends fubar {
	function __construct() {
		parent::__construct("Rumpelstielzchen");
	}
}

Sprachkonstrukte

Fallunterscheidung

Bedingte Verzeigung (if-then-else)

if ($zahl == 0) {
	echo "zahl ist null";
} else {
	echo "zahl ist nicht null";
}

Kurzform

echo (($zahl == 0) ? "null" : "kein null");

Auswahl (switch-case)

Die Fallunterscheidung in PHP funktioniert mit Integer und String gleichermaßen.

switch ($zahl) {
    case 0:
        echo "zahl ist gleich 0";
        break;
    case 1:
        echo "zahl ist gleich 1";
        break;
    case 2:
        echo "zahl ist gleich 2";
        break;
    default:
       echo "zahl ist nicht 0, 1 oder 2";
}
switch ($text) {
    case 'hallo':
        echo "text ist hallo";
        break;
    case 'wiedersehen':
        echo "text ist wiedersehen";
        break;
    default:
       echo "kein hallo und kein wiedersehen";
}

Iteration

Kopfgesteurte Schleife (while)

$i = 4;
while ($i <= 10) {
	$i++;
}

Zählende Iteration (for)

for ($i = 1; $i <= 100; $i++) {
	...
}

Element-Iteration (foreach)

Iteration über eine Auflistung

foreach ($array as $member) {
	...
}

Iteration über eine Assoziative Auflistung

foreach ($hashmap as $key => $value) {
	...
}

Funktionen

var_dump

Liefert eine vollständige Ausgabe der übergebenen Inhalte (variable - dump)

var_dump($_SERVER);

debug_backtrace()

Ermöglicht die Rückverfolgung von Aufrufen. Leifert ein Array mit dem Stack der aufrufenden Funktionen. Der erste Eintrag im Array ist die aktuelle Funktion, der zweite die Funktion welche die aktuelle Funktion aufgerufen hat und so weiter.

var_dump(debug_backtrace());

So kann eine Funktion herausfinden von wem sie aufgerufen wurde mit:

echo "calling function:".debug_backtrace()[1]['function'];

isset und empty

if (isset($variable)) echo "Variabele wurde deklariert.";
if (!isset($variable)) echo "Variabele wurde nicht deklariert.";
if (empty($variable)) echo "Variabele wurde deklariert aber ist leer.";
if (!empty($variable)) echo "Variabele wurde deklariert und ist nicht leer.";

pathinfo();

$pathinfo_result = pathinfo('/www/htdocs/index.php');
echo $pathinfo_result['dirname']; // = "/www/htdocs"
echo $pathinfo_result['basename']; // = "index.php"
echo $pathinfo_result['filename']; // = "index"
echo $pathinfo_result['extension']; // = "php"

ob_start

Der Output-Buffer dient dem Abfangen von Datei-Ausgaben. Er ist insbesondere praktisch wenn man vermeiden möchte das Skripte bereits Ausgabe erzeugen, weil man vielleicht die Ausgabe vorher noch bearbeiten möchte. Hiermit können auch PHP-Dateien genutzt werden in denen ein Mix aus HTML- und PHP-Modus auftaucht, die Ausgabe wird eingefangen.

ob_start();
include 'datei.php';
$content = ob_get_clean();

header

Header erlaubt die Übergabe von HTTP-Statuscodes, Umleitungen, Cache- oder Content-Angaben, ...

header("HTTP/1.0 404 Not Found"); // Beispiel-Statuscode
header("Location: http://www.relast.de/"); // Beispiel-Umleitung
header("Cache-Control: no-cache, must-revalidate"); // Beispiel-Cachenutzung
header('Content-Type: text/html; charset=utf-8'); // Beispiel-Inhaltsangabe

Ein Beispiel für den Download einer Datei die sich auf dem Server befindet:

header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="handbuch.pdf"');
readfile('pdf/handbuch.pdf');

Beispiele

Auswertung von URL-Parametern

Es können sowohl POST- als auch GET-Daten ausgewertet werden.

echo "GET-Daten: ";
var_dump($_GET);
echo "<br>";
echo "POST-Daten: ";
var_dump($_POST);
echo "<br>";

Formular auswerten

index.html

<form action="script.php" method="post">
	<input type="text" name="name" value="Rumpelstielzchen">
	<input type="hidden" name="token" value="12345">
	<button type="submit" title="Absenden">Absenden</button>
</form>

script.php

<?php echo "Du hast den Namen '".$_POST['name']."' eingegeben und Dein Token ist ".$_POST['token']."."; ?>

Bei Select-Feldern muss beachtet werden das ein Multi-Select beim Absenden nur als Array weiter gegeben werden kann personen[]. Werden die eckigen Klammern weg gelassen wird auch bei mehrfacher Auswahl nur ein Element übergeben.

<select name="personen[]" multiple>
	<option value='1'>Max Muster</option>>
	<option value='2'>Testi Tester</option>>
</select>

Download erzeugen

$file = 'handbuch.pdf';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}

MySQL Zugriff

$db_host = 'localhost';
$db_user = 'benutzer';
$db_pass = 'passwort';
$db_name = 'datenbankname';
$db_link = mysql_connect($db_host, $db_user, $db_pass) 
	or die('Datenbankfehler: Verbindung fehlgeschlagen.');
mysql_select_db($db_name) 
	or die('Datenbankfehler: Datenbankauswahl fehlgeschlagen.');
$result = mysql_query("SHOW TABLES FROM {$db_name};") 
	or die('Datenbankabfrage fehlgeschlagen.');
$rows = array();
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{
	$rows[] = $row;
}
foreach ($rows as $row) {
	echo "{$row['Tables_in_'.$db_name]}<br>";
}

Bei einem INSERT kann die ID des letzten eingefügten Elements mit $id = mysql_insert_id(); ermittelt werden.


Copyright © 2024

Datenschutz | Impressum