What he says.
Ich kann dir ein paar subjektive Meinungen geben, die bitte nicht als allgemeingültig zu verstehen sind.
Methode 1 (Objekt über weiteres übergebenes Objekt holen) lässt sich mit dem Hinweis auf das Law of Dementer beantworten.
„Übergib nicht mehr als notwendig.“
Methode 2 (Registry) hatten wir gerade in einem anderen Thread angeschnitten.
Ich glaube, auf php.de hat einer deiner Threads auch schon zu einer Diskussion dazu geführt.
Kurzversion: Für mich ist eine Registry im Grunde ein „globaler Zustand“ (wie ein Singleton oder eine globale Variable). Die Nutzung globaler Variablen verschleiert Abhängigkeiten, was Code oft schwieriger wiederverwendbar und testbar macht.
Viele Leute finden die Konstrukte praktisch (ich will nicht sagen, dass sie es nicht sind) und vor allem Frameworks nutzen Singletons und Registries überaus gerne. (Da ist das Argument der „Wiederverwendbarkeit“ vielleicht nicht so sehr gegeben, da sowieso das gesamte Framework bei jedem neuen Anwendungsfall erneut verwendet wird.)
Ich habe ehrlichgesagt selten den Drang verspürt, solche Muster einzusetzen. Üblicherweise lässt sich derselbe Effekt über „Injection“ (siehe unten) erreichen.
Methode 3 (Abhängigkeiten in Konstruktor neu erstellen) ist eher „altbacken“. Davon würde ich tendentiell abraten und eine Art von „Dependency Injection“ (wenn ich das Wort verwende, meine ich in der Regel Constructor/Setter Injection) verwenden.
Also nicht
[php]public function __construct()
{
$this->_someObject = new SomeObject();
}[/php]
, sondern:
[php]public function __construct(SomeObject $someObject)
{
$this->_someObject = $someObject;
}[/php]
Dabei gibt es wie gesagt keine Pauschalantworten, sondern nur Anwendungsfälle. Kein Pattern ist per se schlecht.
Bestimmt hat dir schon mal jemand empfohlen, dir ein OOP-Framework (wie etwa das Zend Framework) anzusehen. Das kann ich nur unterstreichen (auch in Hinblick auf deinen anderen aktuellen Thread). Das ist eine sehr geeignete Weise, herauszufinden, wie Probleme wie die, vor denen du stehst, angegangen werden können.