Variable von Klassen mehrfach nutzen

proloser

Erfahrenes Mitglied
Ich möchte eine Variable von meiner Klasse mehrfach nutzen.
Ich erkläre es am besten an einem einfachen Beispiel.

PHP:
$class=new class();

$class->var = "1";
$class->var = "2";
$class->var = "3";
.....

$class->var_ausgeben();

Die Ausgabe soll so aussehen:

1
2
3


Mir ist jetzt unklar, wie ich die "var" in ein Array kriege und (ich denke) mit einer foreach-Schleife ausgebe.

Gruß proloser
 
Ist zwar nicht ganz das was Du suchst, aber eventuell hilft es Dir ja trotzdem:
PHP:
class Test
{
    private $arrMembers = array();
    
    public function getMembers()
    {
        return $this->arrMembers;
    }

    public function __set( $strMembername, $mixedValue )
    {
        $this->arrMembers[$strMembername] = $mixedValue;
    }

    public function __get( $strMembername )
    {
        if ( true === $this->exists( $strMembername ) )
        {
            return $this->arrMembers[$strMembername];
        }

        trigger_error(
            'Key ' . $strMembername . ' not found!',
            E_USER_WARNING
        );
    }

    public function exists( $strMembername )
    {
        return array_key_exists( $strMembername, $this->arrMembers );
    }
}

$class = new Test();

$class->var1 = '1';
$class->var2 = '2';
$class->var3 = '3';

foreach ( $class->getMembers() AS $mixedMember )
{
    echo $mixedMember . '<br />';
}

Gruß

EDIT//
So geht es natürlich auch:
PHP:
class Test
{
    private $arrMembers = array();
    
    private $intPosition = 0;

    public function __set( $strMembername, $mixedValue )
    {
        if ( 'var' == $strMembername )
        {
            $this->arrMembers[$this->intPosition++] = $mixedValue;
        }
        else
        {
            // TODO: trigger error?
        }
    }

    public function printMembers()
    {
        foreach ( $this->arrMembers AS $mixedMember )
        {
            echo $mixedMember . '<br />';
        }
    }
}

$class = new Test();

$class->var = '1';
$class->var = '2';
$class->var = '3';

$class->printMembers();
 
Zuletzt bearbeitet:
Wozu den Zähler?
PHP:
class MyCalss
	private var	= array();

	public functoin __set($name, $value){
		//Mittels Switch kannst du auch andere Variabeln so abdecken
		switch($name){
			case 'var':
				$this->var[] = $value;
				break;
			//Hier weitere Properties setzen
			default:
				//TODO: Wenn nicht definiert....
		}

	}

	public function var_ausgeben(){
		return $this->var;
	}
}
 
Wozu den Zähler?
PHP:
class MyCalss
	private var	= array();

	public functoin __set($name, $value){
		//Mittels Switch kannst du auch andere Variabeln so abdecken
		switch($name){
			case 'var':
				$this->var[] = $value;
				break;
			//Hier weitere Properties setzen
			default:
				//TODO: Wenn nicht definiert....
		}

	}

	public function var_ausgeben(){
		return $this->var;
	}
}

Ich habe es jetzt so versucht, allerdings wird trotzdem nur die letzte "var" ausgegeben.
 
Naja, die klasseninterne Variable wurde auch falsch deklariert. Es müsste so aussehen:
PHP:
class MyCalss
  private $var    = array();

  public functoin __set($name, $value) {
    # Mittels Switch kannst du auch andere Variabeln so abdecken
    switch($name) {
      case 'var':
        $this->var[] = $value;
        break;
      # Hier weitere Properties setzen
      default:
        # @todo: Wenn nicht definiert....
    }
  }

  public function var_ausgeben() {
    return $this->var;
  }
}
 
Mein Script macht doch genau was Du willst ...

Hier nochmal ohne Zähler (da hat Yaslaw schon Recht):
PHP:
class Test
{
    private $arrVar = array();

    public function __set( $strMembername, $mixedValue )
    {
        if ( 'var' == $strMembername )
        {
            $this->arrVar[] = $mixedValue;
        }
        else
        {
            // TODO: trigger error?
        }
    }

    public function printVar()
    {
        foreach ( $this->arrVar AS $mixedValue )
        {
            echo $mixedValue . '<br />';
        }
    }
}

$class = new Test();

$class->var = '1';
$class->var = '2';
$class->var = '3';

$class->printVar();

Gruß
 
Zuletzt bearbeitet:
Zurück