Przyjęte rozwiązanie ma niewielką wadę, która jest że rozbrajania nieruchomość faktycznie całkowicie usuwa go z tego obiektu, tak aby sprawdzić jak $this->someProperty == null
spowodowałby „Undefined właściwość "zawiadomienie. Właściwości są nieważne domyślnie, więc to byłoby bardziej poprawne:
class Object {
function resetObject() {
foreach ($this as $key => $value) {
$this->$key = null; //set to null instead of unsetting
}
}
}
Istnieje również możliwość, że niektóre właściwości mogły być podane wartości domyślne (np protected $someArray = array();
) ... jeśli chcesz przywrócić wszystkie właściwości wracając do swoich pierwotnych wartości domyślnych, musisz użyć odbicia:
class Object {
function resetObject() {
$blankInstance = new static; //requires PHP 5.3+ for older versions you could do $blankInstance = new get_class($this);
$reflBlankInstance = new \ReflectionClass($blankInstance);
foreach ($reflBlankInstance->getProperties() as $prop) {
$prop->setAccessible(true);
$this->{$prop->name} = $prop->getValue($blankInstance);
}
}
}
To może być przesada, ale może być ważne w niektórych sytuacjach. Zauważ, że byłoby to niemożliwe, gdyby klasa miała wymagane argumenty konstruktora; w takim przypadku można użyć ReflectionClass::newInstanceWithoutConstructor (wprowadzonego w PHP 5.4), a następnie wywołać __construct()
ręcznie po wywołaniu resetObject()
.
to rzeczywiście wadliwy, trzeba użyć 'foreach ($ to jako $ key => $ property) {rozbrojony ($ this -> $ key);}' – raveren
edytowany swoją odpowiedź, dodać kilka funkcji naśladować obiekt. Możemy mieć jakąś właściwość, która jest ustawiona na '__construct' i nie chcemy jej stracić. – GusDeCooL
Odzyskiwanie właściwości nie jest tym samym, co ustawienie wartości NULL. Właściwości mają domyślnie wartość null, więc lepiej byłoby ustawić je na wartość null. Aby uzyskać więcej informacji i kod, zobacz moją odpowiedź poniżej. –