Methoden von einer Klasse auslagern - PHP

finnex

Erfahrenes Mitglied
Hallo,
gibt es irgendeine Möglichkeit die Klasse und die Methodenzu trennen?

Bsp:

PHP:
class Test
{
   
public function test1()
{

}

publich function test2()
{

}

}

Kannich da irgendwie zwei neue PHP Dokumente erstellen(test1.php und test2.php)
und die in der main.php zusammenfügen?
Mein Grund ist der, da meine Klasse doch schon recht viel Quelltext enthält und ich solangsam den Überblick verliere.

Ich denke da immer an C++ wo mach die Methoden schön von den Atributen und Klassen trennen kann.

Mfg Finnex
 
Hi,

es gibt die Möglichkeit, den Quellcode der einzelnen Methoden in Dateien auszulagern und diese dann jeweils mit include() einzubinden. Das ist aber ganz, ganz schlechter Stil und bietet keine gute Performance oder gar Übersichtlichkeit.
Mein Grund ist der, da meine Klasse doch schon recht viel Quelltext enthält und ich solangsam den Überblick verliere.
An dieser Stelle solltest du definitiv ansetzen und deine Klasse in Teilklassen zerlegen, die dann zusammenarbeiten. Wenn eine Klasse zu umfangreich wird, ist das meistens ein Anzeichen dafür, dass man das Problem nicht fein genug zerlegt hat.

Vielleicht hilft dir das ja weiter. :)
 
Ich glaube er meint sowas

PHP:
class myClass{

	public function tuirgendwas(){
		include "tuirgendwas.php";
	}
	
	public function tuwasanderes(){
		include "tuwasanderes.php";
	}

}
 
Hallo,
ok dann weis ich auch dass es nur bedingt möglich ist.
Habe nun einmal anfangen wollen die Klasse in meherer Klassen zu unterteilen:
Doch da habe ich nun folgendes Problem:

Test.php
----------------------
PHP:
include 'test2.php';

class test1
{
  private $test2;
  
  function __construct()
   {
     $test2 = new test2;
     echo "Class Test2 erstellt"; 
   }
   
   public function test()
   {
     echo "Test1 test1";
   }  
}

Test2.php
------------------------------
PHP:
class test2
{
   public function test()
   {
     echo "Test2 test2";
   }  
}

Wenn ich nun ein Objekt von Test erstelle:
$test = new test1;
erstelle ich ja automatisch noch ein Objekt von Test2.
Wie kann ich nun von test1 auf test2 die Methode zugreifen?

habe schon test1::test2->test();
versucht, jedoch klappt dies nicht
Weis da noch jemand Rat?

MfG Finnex
 
Vererbung ist das Stichwort - extends
PHP:
class test1 extends test2
{
  function __construct()
  {
    // evtl. noch sofern vorhanden parent::__construct ()
    echo "Class Test1 + Test2 erstellt"; 
  }
   
   public function test()
   {
     echo "Test1 test1";
   }  
}

Das Problem dabei - du überschreibst durch die Methode test in der Klasse test1 die Methode test der Klasse test2. Versuchs so:
PHP:
class test1 extends test2
{
  function __construct()
  {
    // evtl. noch sofern vorhanden parent::__construct ()
    echo "Class Test1 + Test2 erstellt"; 
  }
   
   public function machedies ()
   {
     echo "Test1 test1";
   }  
} 

class test2
{
   public function machejenes ()
   {
     echo "Test2 test2";
   }  
}

Grüße BN
 
Würde auch zu extend raten.
Aber ich fand die Idee lustig deswegen hab ichs mal probiert.

PHP:
class myClass{

	public $class2;

	function __construct(){
		$this->class2 = new myClass2;
	}

	public function test(){
		echo '<br>test funktion von myclass';
	}
}

class myClass2{

	public function test2(){
		echo '<br>test2 funktion von myClass2';
	}

}

$a = new myClass;
$a->test();
$a->class2->test2();

/*
test funktion von myclass
test2 funktion von myClass2
*/
 
Hallo,
ich will gerade keine Vererbung machen.
Ich habe da an sowas wie an eine Komposition oder Aggregation gedacht.

Weil ich müsste dann eine Klasse von mehreren anderen Klassen erben lassen.
Gibt es keine Möglichkeit es mit eine Komposition zu realisieren?

MfG Finnex
 
Hmm nicht schön aber selten.

PHP:
class myClass{
	
	public function test(){
		echo '<br>test funktion von myclass';
	}
	
	public function callClass($className){
		return new $className($this);
	}
}

class myClass2{

	public $caller;

	function __construct(&$callerClass){
		$this->caller = &$callerClass;
	}
	
	public function test(){
		$this->caller->test();
	}
}

$a = new myClass();
$b = $a->callClass('myClass2');
$b->test();

//test funktion von myclass
 
Zurück