Сброс переменных экземпляра класса с помощью метода - PullRequest
3 голосов
/ 22 декабря 2009

Кто-нибудь знает, как сбросить переменные экземпляра с помощью метода класса. Примерно так:

class someClass 
{
    var $var1 = '';
    var $var2 = TRUE;

    function someMethod() 
    { 
        [...]
        // this method will alter the class variables
    }

    function reset()
    {
        // is it possible to reset all class variables from here?
    }
}

$test = new someClass();
$test->someMethod();
echo $test->var1;

$test->reset();
$test->someMethod();

Я знаю, что могу просто сделать $ test2 = new SomeClass (), НО я особенно ищу способ сброса экземпляра (и его переменных) с помощью метода.

Возможно ли это вообще ???

Ответы [ 4 ]

6 голосов
/ 22 декабря 2009

Вы можете использовать отражение для достижения этой цели, например, используя get_class_vars:

foreach (get_class_vars(get_class($this)) as $name => $default) 
  $this -> $name = $default;

Это не совсем устойчиво, оно разбивается на непубличные переменные (которые get_class_vars не читает) и не затрагивает переменные базового класса.

0 голосов
/ 22 декабря 2009

Да, вы можете написать reset () как:

function reset()
{
    $this->var1 = array();
    $this->var2 = TRUE;
}

Вы хотите быть осторожным, потому что вызов new someClass () даст вам совершенно новый экземпляр класса, совершенно не связанный с оригиналом.

0 голосов
/ 22 декабря 2009

это может быть легко сделано;

public function reset()
{
    unset($this);
}
0 голосов
/ 22 декабря 2009

Конечно, сам метод может назначать явные значения свойствам.

public function reset()
{
  $this->someString  = "original";
  $this->someInteger = 0;
}

$ this-> SetInitialState () из Конструктора

Так же, как и другая идея, у вас может быть метод, который сам устанавливает значения по умолчанию и вызывается из конструктора. Вы можете позвонить и в любой момент позже.

<?php

  class MyClass {
    private $var;
    function __construct()     { $this->setInitialState(); }
    function setInitialState() { $this->var = "Hello World"; }
    function changeVar($val)   { $this->var = $val; }
    function showVar()         { print $this->var; }
  }

  $myObj = new MyClass();
  $myObj->showVar(); // Show default value
  $myObj->changeVar("New Value"); // Changes value
  $myObj->showVar(); // Shows new value
  $myObj->setInitialState(); // Restores default value
  $myObj->showVar(); // Shows restored value

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...