Phil: oop variablen in funktionen

Morgen,
innerhalb einer Klasse soll eine Funktion eine andere Funktion
aufrufen und dabei eine Variable an die aufrufende Funktion
übergeben. Wie muss das Script angepasst werden?

class test  
{  
	private $buchstabe = array('o','r','l','d');  
	public $wort = 'W';  
	  
	function funct1()  
	{  
		$wort2 = 'W';  
		$this->funct2();  
		return $wort2;  
	}  
	  
	function funct2()  
	{  
		foreach($this->buchstabe as $row)  
		{  
			$this->wort .= $row;  
			$this->wort2 .= $row; // ??  soll $wort2 in funct1() erweitern  
		}  
	}  
}
$obj = new test();  
$obj->funct2();  
echo $obj->wort;

-------------------
Gibt erwartungsgemäß 'World' aus.

$obj = new test();  
echo $obj->funct1();

-------------------
Gibt logischerweise 'W' aus, soll aber auch 'World' ausgeben.
Wie erweiter ich die Variable der aufrufenden Funktion durch
die aufgerufene Funktion?

  1. Hi!

    innerhalb einer Klasse soll eine Funktion eine andere Funktion aufrufen und dabei eine Variable an die aufrufende Funktion übergeben. Wie muss das Script angepasst werden?

    Das ist Grundlagenwissen über Funktionen und hat mit OOP recht wenig zu tun, beziehungsweise ist dort genauso anzuwenden. Wenn etwas übergeben/übernommen werden soll, macht man das über Funktionsparameter. Das Ergebnis wird über den Rückgabewert zurückgegeben.

    Lo!

    1. Danke, das Grundlagenwissen ist mir hoffentlich bekannt.
      Meine Frage sollte wohl lauten: Kann ich auch mit einer ähnlichen Methode
      wie $->this statt auf eine Objekvariable auf eine Variable innerhalb einer
      Methode zugreifen. Speziell auf eine aufrufende Funktion. Also ohne
      Funktionsparameter. Innerhalb einer oop Klasse.

      Das ist Grundlagenwissen über Funktionen und hat mit OOP recht wenig zu tun, beziehungsweise ist dort genauso anzuwenden. Wenn etwas übergeben/übernommen werden soll, macht man das über Funktionsparameter. Das Ergebnis wird über den Rückgabewert zurückgegeben.

      Lo!

      1. Moin!

        Danke, das Grundlagenwissen ist mir hoffentlich bekannt.

        Ich hätte da jetzt einen anderen Eindruck. Auch wenn's nur ein Testbeispiel ohne wirklichen Sinn ist: Genau für diesen Zweck, den du versuchst nachzubauen, wurden Funktionsparameter und Rückgabewerte erfunden.

        Meine Frage sollte wohl lauten: Kann ich auch mit einer ähnlichen Methode
        wie $->this statt auf eine Objekvariable auf eine Variable innerhalb einer
        Methode zugreifen. Speziell auf eine aufrufende Funktion. Also ohne
        Funktionsparameter. Innerhalb einer oop Klasse.

        Nein. Lokale Variablen einer Funktion sind immer lokal. Wenn du was dagegen hast: GLOBAL hilft. Ist aber alles andere als OOP. Überhaupt würde ich behaupte, dass DEINE Klasse zwar eine Klasse, aber definitiv kein OOP ist.

        - Sven Rautenberg

        1. Moin!

          Danke, das Grundlagenwissen ist mir hoffentlich bekannt.

          Ich hätte da jetzt einen anderen Eindruck. Auch wenn's nur ein Testbeispiel ohne wirklichen Sinn ist: Genau für diesen Zweck, den du versuchst nachzubauen, wurden Funktionsparameter und Rückgabewerte erfunden.

          Habe ich manchmal auch.

          Nein. Lokale Variablen einer Funktion sind immer lokal. Wenn du was dagegen hast: GLOBAL hilft. Ist aber alles andere als OOP. Überhaupt würde ich behaupte, dass DEINE Klasse zwar eine Klasse, aber definitiv kein OOP ist.

          Danke, genau damit ist meine Frage beantwortet. GLOBAL kommt nicht in Frage.
          Ich habe ein älteres Script von mir umgeschrieben und wollte mir Arbeit sparen.
          Geht ja bekanntlich oft nach hinten los.

          Danke euch

          Phil

        2. Also ganz klassisch so:

          class test  
          {  
          	private $buchstabe = array('o','r','l','d');  
          	  
          	public function funct1()  
          	{  
          		$wort = 'W';  
          		$wort .= $this->funct2();  
          		return $wort;  
          	}  
          	  
          	private function funct2()  
          	{  
          		$wort = '';  
          		foreach($this->buchstabe as $row)  
          		{  
          			$wort .= $row;  
          		}  
          		return $wort;  
          	}  
          }  
            
          $obj = new test();  
          echo $obj->funct1();
          

          -------------------------
          Ausgabe 'World'

          1. Also ganz klassisch so:

            Nein. Du solltest getter und setter verwenden:

              
              
            public function getWord(){  
             return $this->word;  
            }  
              
            public function setWord($someString){  
             $this->word = $someString;  
            }  
            
            

            Und vieles mehr natürlich!