Kann mir das jemand erklären:
2 Klassen
- User
- UserController
Aus User erzeuge ich ein object : $user = new User();
Wenn ich jetzt $user in UserController schicke und dort als Eigenschaft setze (egal ob static oder nicht), dann wird eine Referenz aufgebaut ?
Bsp:
PHP
class User
{
private $name;
public function setName($val)
{
$this->name = $val;
}
public function getName()
{
return $this->name;
}
}
class UserController
{
private static $user;
public static function init($user)
{
self::$user = $user;
}
public static function getName()
{
return self::$user->getName();
}
public static function setName($val)
{
self::$user->setName($val);
}
public static function unsetObj()
{
self::$user = null;
}
public static function createNewObj()
{
self::$user = new User();
}
}
$user = new User();
UserController::init($user);
UserController::setName("none");
echo '
<pre>
<b>do: $user->setName("cottton");</b>'.$user->setName("cottton").'
$user->getName() == '.$user->getName().'
UserController::getName() == '.UserController::getName().'
<b>do: UserController::setName("none");</b>'.UserController::setName("none").'
$user->getName() == '.$user->getName().'
UserController::getName() == '.UserController::getName().'
<b>do: UserController::unsetObj();</b>'.UserController::unsetObj().'
$user->getName() == '.$user->getName().'
UserController::getName() == Fatal error: Call to a member function getName() on a non-object in C:\xampp\htdocs\test.php on line 28
<b>do: UserController::createNewObj();</b>'.UserController::createNewObj().'
$user->getName() == '.$user->getName().'
UserController::getName() == '.UserController::getName().'
<b>do: $user->setName("cottton");</b>'.$user->setName("cottton").'
$user->getName() == '.$user->getName().'
UserController::getName() == '.UserController::getName().'
</pre>';
Alles anzeigen
output:
Code
do: $user->setName("cottton");
$user->getName() == cottton
UserController::getName() == cottton
do: UserController::setName("none");
$user->getName() == none
UserController::getName() == none
do: UserController::unsetObj();
$user->getName() == none
UserController::getName() == Fatal error: Call to a member function getName() on a non-object in C:\xampp\htdocs\test.php on line 28
do: UserController::createNewObj();
$user->getName() == none
UserController::getName() ==
do: $user->setName("cottton");
$user->getName() == cottton
UserController::getName() ==
Alles anzeigen
Wieso wird ne Referenz erstellt? Ich bin immer davon ausgegangen, dass das nur passiert, wenn ich "&" benutze oder vererbe.