Hallo,
mich würde interessieren wie ihr Setter/Getter Methoden in PHP 5.1 in euren Code implementiert bzw. ob ihr überhaupt Variablen schützt um die OOP Kapselung zu gewährleisten? Seit PHP 5 und __set/__get sind ja Konstruktionen wie die folgende möglich:
Diese Methode hat Nachteile. Zum Einen sind __set/__get keine wirklichen property Handler zum Anderen ist es nicht mehr möglich die Variablen auf normale Art und Weise mit individuellen Eigenschaften, also private, protected und public zu deklarieren. PHPDoc hält von dieser Methode auch wenig . Auch mit der Überladung von __call sieht es nicht besser aus.
Neben der oben genannten Methode gibt es auch die Möglichkeit über Reflection oder Methodensuche die entsprechenden Accessor Methoden, ähnlich wie in C# oder Java, zu finden.
Beispiel:
Nachteil ist die Performanceeinbuße und eventuelly Probleme bei der Vererbung.
Summa Summarum verfügt PHP 5 nicht über echte Property Accessoren. Bei den Codes handelt es sich nur um Workarounds.
MfG
mich würde interessieren wie ihr Setter/Getter Methoden in PHP 5.1 in euren Code implementiert bzw. ob ihr überhaupt Variablen schützt um die OOP Kapselung zu gewährleisten? Seit PHP 5 und __set/__get sind ja Konstruktionen wie die folgende möglich:
PHP-Code:
<?php
class User
{
private $values;
public function __construct()
{
$this->values = array(
"name" => "",
"email" => "",
"pwd" => ""
);
}
public function __get( $key )
{
if( array_key_exists( $key, $this->values ) )
{
return $this->values[$key];
}
die( "Can't access that property!\n" );
}
public function __set( $key, $value )
{
if( array_key_exists( $key, $this->values ) )
{
$this->values[$key] = $value;
}
else
{
die( "You can't set that property!\n" );
}
}
}
$user = new User();
$user->name = "Markus";
echo $user->name;
?>
Neben der oben genannten Methode gibt es auch die Möglichkeit über Reflection oder Methodensuche die entsprechenden Accessor Methoden, ähnlich wie in C# oder Java, zu finden.
Beispiel:
PHP-Code:
function __set($property, $value)
{
$method = 'set'.$property;
if (!method_exists($this, $method))
throw new Exception("$property setter is not defined");
$this->$method($value);
}
function __get($property)
{
$method = 'get'.$property;
if (!method_exists($this, $method))
throw new Exception("$property getter is not defined");
return $this->$method();
}
Summa Summarum verfügt PHP 5 nicht über echte Property Accessoren. Bei den Codes handelt es sich nur um Workarounds.
MfG
Kommentar