Methoden kombinieren?

MrSpoocy

Grünschnabel
Hi,

ich weis die Frage klingt vieleicht doof aber ich steh grade aufm Schlauch.

PHP:
class XYZ
{
	public function te()
	{
		return Array("ABC","DEF","GHI");
	}
	
	public function out($result)
	{
		echo "Array: ".implode(",",$result);
	}
}

$ga = new XYZ();
$ga->te()->out();

dabei soll er dann logischer weise den Array von te einfach nur ausgeben. Der Sinn dahinter soll sein das ich viele kleine Methoden habe welche einen Array zurück geben (absichtlich nicht einfach etwas in eine Variable packen !) und ich diese dann immer mit out() ausgeben kann. Oder vieleicht sogar nicht nee 3te Methode wo ich dann nin filter über den Array laufen lasse.

Wo is denn da jetzt der fehler :(

mfg Spoocy
 
Dein Problem ist, dass te() hier die Adresse von deinem Test-Array zurückgibt und Arrays als Objekte gesehen keine Funktion namens "out()" haben.

Die Lösung deines Problems wäre
PHP:
class XYZ 
{ 
    public function te() 
    { 
        return Array("ABC","DEF","GHI"); 
    } 
     
    public function out($result=NULL) 
    { 
       $Array = NULL;
       if($result==NULL)
       {
          $Array = te();
       }
      else
      {
          $Array = $result;
      }
      echo "Array: ".implode(",",$Array); 
    } 
} 

$ga = new XYZ();
$ga->out(); // Gibt ABC,DEF,GHI aus

$ga = new XYZ();
$array =Array("JKL","MNO","PQR"); 
$ga->out($array); // Gibt JKL,MNO,PQR aus

ich habs jetzt einfach mal so hingetippt und nicht getestet. Aber so in etwa sollte es klappen.

Oder wenn du bei deinem Konstrukt bleiben willst, sagst du:
PHP:
$ga = new XYZ();
$ga->out(ga->te());
 
Zuletzt bearbeitet:
Das erfüllt leider in keinster weise den Sinn den ich verfolge. Denn bei deinem Beispiel binde ich ja die Methode out() entweder an die Methode te() oder an einen Array den ich übergebe.

Ziel soll es sein mit das out() an jede beliebege Methode geknüpft werden kann welche einen Array zurück gibt.
 
Wenn du das Konstrukt
PHP:
$ga->te()->out();
aufrecht erhalten willst, muss du deine te() funktion soweit umstricken, dass diese kein Array zurückgibt, sondern eher ein Objekt,dass die Methode "out()" hat.
 
Hm.. wahrscheinlich hab ich dich falsch verstanden. Aber ich würde XYZ als Ableitung vom ArrayObject nehmen.

PHP:
<?php 
class XYZ extends ArrayObject{

    public static function te(){
        return new XYZ(array("ABC","DEF","GHI"));
    }
    
    public function out(){
        echo "Array: ".implode(",",$this->getArrayCopy());
    }     
    
}

$a = XYZ::te();
$a->out();

?>
 
Also so richtig bin ich damit auch nich zufriede, weil eigendlich ja nichts anderes gemacht wird als direckt beim einleiten der Class die 1te methode aufgerufen wird.
Ich weis nicht mehr wo das war aber irgendwo gab es halt die möglichkeit einfach Methoden zu koppelt. Wenn ich als return $this nehme gibt es zumindest keinen fehler, aber es wird halt auch kein Paramter übergeben. Is ja auch Logisch.
 
Ich glaueb jetzt versteh ich was du meisnt.
Das kannt du über eine Hilfsklasse vom Type ArrayObject machen.
PHP:
<?php

class MyArray extends ArrayObject{
    public function out(){
        echo "Array: ".implode(",",$this->getArrayCopy());
    }         
}

class XYZ{

    public function te(){
        return new MyArray(array("ABC","DEF","GHI"));
    }
    
    
}

$a = new XYZ();
$a->te()->out();

?>
 
Zuletzt bearbeitet:
Zurück