Frage 1: Kann man mit Funktionsparameter und Instranzvariablen einer Klass "gleichberechtigt" arbeiten, mit außnahme vom Scope?
Wann ist es sinnvoll eine Instanzvariable zu erzeugen und wann ein zu übergebenden Funktionsparameter?
Das ist keine einfache Frage, die auch viel Zündstoff für Glaubenskriege bildet.
Andererseit, wenn man Funktionsparameter benötigt und ganz auf Instanzvariablen verzichtet, entsteht das Problem das übergebene Variablen immerwieder weitergereicht werden.
Du kannst der Funktion auch erst Mal nur einen Parameter übergeben und dann an späterer Stelle einen weiteren Parameter und so weiter, bis die Funktion alle ihre Parameter hat und du sie letztendlich aufrufen kannst. Das nennt sich partielle Applikation und ist in PHP nur etwas mühselig machbar, indem man immer eine neue Funktion erzeugt, wenn man einen Parameter kennt. Angenommen ich habe zum Beispiel eine Funktion zum Aufsummieren zweier Zahlen:
function sum ($a, $b) {
return $a + b;
}
Und irgendwann weiß ich nun, dass die erste Zahl eine 3 sein muss. Dann kann ich mir an dieser Stelle eine neue Funktion ableiten, die zu jeder Zahl einfach drei addiert. Nun merke ich mir nicht mehr die Zahl drei, sondern die Funktion $sum3:
$sum3 = function ($b) { return sum(3, $b) }
Wenn ich im späteren Programmverlauf dann festelle, dass die zweite Zahl eine 7 sein muss, kann ich die Funktion $sum3 mit 7 als Parameter aufrufen:
$result = $sum(7);
Das ist ein wesentlicher Baustein der funktionalen Programmierung. Das ist ein Paradigma, das im Gegensatz zur Objektorientierung dafür bekannt ist, sehr modulare und wiederverwendbare Programme hervorzubringen, die häufig in einem Bruchteil der Zeit entwickelt werden können. Die Kosten dafür sind ein eher unvorhersehbares Perfromance-Modell und enorm hohe Abstraktion. Gebraucht wird sie beispielsweise bei Programmen, die während ihrer Lebenszeit eine sehr hohe Evolution aufweisen, z.B. Spamm-Filter, die ständig atkuell gehalten werden müssen um ihre Aufgabe effektiv bewältigen zu können. Oder aber, bei sehr kritischen Systemen aus dem Katastrophenschutz und Finanzwesen, bei denen Software-Fehler unfassbar teuer werden.
PHP ist nun leider sehr schlecht für diese Form der Programmierung geeignet. Wenn das für dich interessant klingt, dann kann ich dir nur empfehlen dich mit einer Programmiersprache aus diesem Bereich zu beschäftigen, da wären zum Beispiel: PureScript, Haskell, Idris oder Coq. Unabhängig davon, ob du in deinem beruflichen Alltag wirklich jemals mit einer dieser Sprachen arbeiten wirst, wirst du auf jeden Fall einen Haufen neuer und sehr eleganter Lösungsstrategien kennenlernen von denen du auch in der objektorientierten Programmierung profitieren wirst.