Die Funktionen
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() und
__debugInfo() sind in PHP-Klassen magisch. Man kann keine Funktionen gleichen Namens in einer seiner Klassen haben, wenn man nicht die magische Funktionalität, die sie mit sich bringen, haben will.
magischeMethoden.php
class DB {
private $login = "";
private $pass = "";
private $istVerbunden = false;
public function __construct($login, $pass)
{
$this->login = $login;
$this->pass = $pass;
$this->verbinden();
}
public function verbinden()
{
$this->istVerbunden = true;
}
// serialize
public function __sleep()
{
echo "sleeping...<br>";
return array('login', 'pass');
}
// unserialize
public function __wakeup()
{
echo "aufstehen...<br>";
$this->verbinden();
}
public function istDBVerbunden() {
if ($this->istVerbunden) {
echo "verbunden";
} else {
echo "nicht verbunden";
}
}
}
$db = new DB("user", "geheim");
echo $db->istDBVerbunden();
echo "<br>";
$out = serialize($db);
$clonedObject = unserialize($out);
var_dump($clonedObject);
echo "<br>";
echo $clonedObject->istDBVerbunden();
echo "<hr>";
class Mathematik {
public $operation = "";
public function addieren($x, $y) {
return $x + $y;
}
public function subtrahieren($x, $y)
{
return $x - $y;
}
public function __invoke($x, $y)
{
if ($this->operation == "minus") {
echo $this->subtrahieren($x, $y);
} else if ($this->operation == "plus") {
echo $this->addieren($x, $y);
}
}
}
$math = new Mathematik();
$math->operation = "plus";
$math(5, 15);
class Benutzer {
private $username;
private $vorname;
private $nachname;
private $id;
public function __construct($username, $vorname, $nachname)
{
$this->username = $username;
$this->vorname = $vorname;
$this->nachname = $nachname;
$this->id = 12;
}
public function __toString()
{
return "$this->username: $this->vorname $this->nachname";
}
}
echo "<hr>";
$user = new Benutzer("oop.creative-it.org", "Jens", "Haake");
echo $user;