Yöntemi ile sınıf örnek değişkenler Sıfırla

4 Cevap

Herkes bir sınıf yöntemi ile örnek değişkenleri sıfırlamak için nasıl biliyor mu. Böyle bir şey:

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();

Ben sadece = new SomeClass $ dnm2 (yapabileceğini biliyorum) ama ben özellikle bir yöntemle örneği sıfırlamak (ve değişkenler) için bir yol arıyorum.

Bu hiç mümkün mü??

4 Cevap

Kullanarak, örneğin, bunu başarmak için yansıma kullanabilirsiniz get_class_vars:

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

Bu genel olmayan değişkenler tatili (ki get_class_vars okumaz) ve taban sınıf değişkenleri basmayacak, tamamen sağlam değildir.

Evet, siz) (reset yazabilirsiniz gibi:

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

Yeni someClass çağrı () size orijinal tamamen ilgisiz sınıfının tamamen yeni bir örneğini alacak çünkü dikkatli olmak istiyorum.

bu kolay yapılabilir;

public function reset()
{
    unset($this);
}

Tabii, yöntem, kendisi özelliklerine açık değerler atayabilirsiniz.

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

$this->SetInitialState() from Constructor

Sadece başka bir fikir olarak, varsayılan değerlerini kendisi ayarlar ve yapıcı içinde denir bir yöntem olabilir. Siz daha sonra da herhangi bir noktada diyebiliriz.

<?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

?>