Klasse in Klasse aufrufen

Jan-Frederik Stieler

Monsterator
Moderator
Hallo,
ich habe zum ersten mal in einem PHP-Script eine Klasse verwendet.
Nun habe ich das Problem das ich innerhalb dieser Klasse gerne eine andere Klasse und entsprechend verschachtelte Funktion ($class->children() ) verwenden möchte.
Ich habe am Anfang der Klasse die klasse per globals (global $class) eingebunden. Wenn ich nun aber versuche mit dem Pfeiloberator zu agieren bekomme ich die Fehlermeldung
Call to a member function children() on a non-object
Was mache ich falsch bzw. wie kann ich eine Klasse in einer Klasse aufrufen?

Viele Grüße
 
Wie die Ausgabe schon andeutet, ist zu dem Zeitpunkt, in dem Du versuchst die Methode aufzurufen, in der Variablen keine Instanz einer Klasse gespeichert. Somit liegt das Problem darin, dass Du anscheinend die Variable nicht korrekt deklariert hast. Allgemein würde ich Dir davon abraten, das Konstrukt global zu verwenden, insbesondere, wenn Du mit Klassen arbeitest – hierfür gibt es entsprechende Entwurfsmuster.
 
Dann ist $class woh kein Objekt (einer Klasse).

global ist so ziemlich das Gegenteil jeglicher Objektorientierter Programmierung.

primitivbeispiel:
PHP:
<?php

class A {
	public function test() {
		echo 'test';
	}
}

class B {
	public $a;

	public function __construct() {
		$this->a = new A;
	}

	public function callTestOnA() {
		$this->a->test();
	}
}


$b = new B;
$b->callTestOnA(); // test

Die bessere Idee (Testbarkeit, Abhängigkeiten, AUstauschbarkeit) wäre allerdings Dependency Injection, also ein Object der einen in die andere Klasse injizieren, ca so:

PHP:
<?php

class A {
	public function test() {
		echo 'test';
	}
}

class B {
	public $a;

	public function __construct(A $a) {
		$this->a = $a;
	}

	public function callTestOnA() {
		$this->a->test();
	}
}


$a = new A;
$b = new B($a);
$b->callTestOnA(); // test
 
Zurück