zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden PHP, OOP und Array Übergabe

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 12.12.2010, 15:30
Benutzerbild von laborix
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 11.12.2005
Beiträge: 1.494
laborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Mensch
Standard PHP, OOP und Array Übergabe

Hallo miteinander,

eine theoretische Frage, die ich noch nicht verstehe, die mich aber sehr interessiert.

Die Klasse:
Code:
class ConfigPanel {

  public function readconfigfile(array $readconfig) {

  }

  public function showconfigfile(array $showconfig) {

  }

  public function writeconfigfile(array $writeconfig) {

  }

}
Der Aufruf in configpanel.php:
Code:
require_once("class.contactconfig.php");

$debugarray = array();
$debugconfigpanel = new ConfigPanel();
$debugarray = $debugconfigpanel->readconfigfile($debugarray);
$debugarray = $debugconfigpanel->showconfigfile($debugarray);
$debugarray = $debugconfigpanel->writeconfigfile($debugarray);
Zur Frage:
Kann ich für alle drei Funktionen innerhalb der Klasse den gleichen Array Namen angeben?
Code:
class ConfigPanel {

  public function readconfigfile(array $config) {

  }

  public function showconfigfile(array $config) {

  }

  public function writeconfigfile(array $config) {

  }

}
Weiss das einer von euch und kann mir das irgendwie verständlich machen ob das geht oder nicht?

Hinweis:
Zur Zeit arbeite ich mit drei verschiedenen Array Namen und es funktioniert. Ich bekomme auch keinen Fehler oder Hinweis, wenn ich mit
Code:
error_reporting (E_ALL | E_STRICT);
arbeite. Ich stecke hier noch etwas in den Anfängen

Danke
__________________
Personal stuff
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 12.12.2010, 23:27
Benutzerbild von stravid
Human Compiler
XHTMLforum-Mitglied
 
Registriert seit: 16.01.2008
Ort: Austria
Beiträge: 186
stravid befindet sich auf einem aufstrebenden Ast
Standard

Ja das geht.

Du kannst ihnen den gleichen Namen geben da es Funktionsparameter sind und sie deswegen nichts miteinander zu tun haben.
__________________
David Strauß - stravid.com
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 13.12.2010, 01:45
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Funktionsparameter sind nur in den Funktionen verfügbar in denen sie definiert sind. So sind deine 3 Arrays auch nur in den Funktionen verfügbar, sie wissen garnicht dass in einer anderen Funktion eine Variable gleichen Namens existiert.

Würdest du jedoch eine Klassenvariable daraus machen ($this->array), dann wäre diese in jeder Funktion das selbe Array. Ändert dann eine Funktion etwas am Inhalt, z.B. durch hinzufügen oder löschen, so wissen alle andere Funktionen gleich von der Änderung und arbeiten mit dem gleichen Datenbestand. Es kommt immer darauf an wofür es gebraucht wird.
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
  #4 (permalink)  
Alt 13.12.2010, 20:30
Benutzerbild von laborix
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 11.12.2005
Beiträge: 1.494
laborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Mensch
Standard

Danke euch beiden, das habe ich nicht gewusst.

Empfiehlt es sich allen internen Funktionen den gleichen Übergabe Parameter zu geben?
__________________
Personal stuff
Mit Zitat antworten
  #5 (permalink)  
Alt 13.12.2010, 22:15
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Es empfiehlt sich logische Namen zu verwenden. Wie die heißen ist egal, ob es die selben meistens auch. Ich arbeite nicht gerne mit Klassenvariablen, die wollen so gerne initialisiert werden. Ich übergebe Parameter gerne in die Funktionen beim Aufruf. Wenn ich Objekte übergeben muss, dann kommen die in eine Klassenvariable. Aber sonst verwende ich die selten.
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
  #6 (permalink)  
Alt 14.12.2010, 00:06
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Zitat:
Zitat von Praktikant Beitrag anzeigen
Es empfiehlt sich logische Namen zu verwenden. Wie die heißen ist egal, ob es die selben meistens auch. Ich arbeite nicht gerne mit Klassenvariablen, die wollen so gerne initialisiert werden. Ich übergebe Parameter gerne in die Funktionen beim Aufruf. Wenn ich Objekte übergeben muss, dann kommen die in eine Klassenvariable. Aber sonst verwende ich die selten.
Heisst das, dass Du Klassen (Objekte) lediglich als Wrapper (Namespace) für Deine Funktionen nutzt?

Ich komme bei objektorientierter Programmierung nicht ohne Klassenvariablen bzw. Attributen aus, oder verstehe ich Dich hier falsch?
Mit Zitat antworten
  #7 (permalink)  
Alt 14.12.2010, 01:16
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Zitat:
Zitat von mantiz Beitrag anzeigen
Heisst das, dass Du Klassen (Objekte) lediglich als Wrapper (Namespace) für Deine Funktionen nutzt?

Ich komme bei objektorientierter Programmierung nicht ohne Klassenvariablen bzw. Attributen aus, oder verstehe ich Dich hier falsch?
Nein, das hast du richtig verstanden. So Sachen wir Benutzer ID oder sowas speicher ich auch in Klassenvariablen, aber das war es dann meistens schon. Ich versuche immer so viel möglich zu vererben, bis ich die Möglichkeiten des Vererbens sprenge. Das muss man dann zwar alles irgendwo aufschreiben, aber das ist ja machbar

Allerdings ändert sich das in regelmäßigen Abständen. Mit kleinen Projekten probiere ich immer wieder andere Wege aus, den für mich Perfekten habe ich leider noch nicht gefunden.
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
  #8 (permalink)  
Alt 14.12.2010, 10:27
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

OK, hatte mich nur mal interessiert.

Ich war selbst auch lange auf der Suche, dann mal viel Erfolg.
Mit Zitat antworten
  #9 (permalink)  
Alt 14.12.2010, 11:27
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Wie machst du es denn? Wie gehst du mit Vererbung, Klassenvariablen und so weiter um?
Was überginst du eher an Klassenvariablen, was eher als Funktionsparameter?

Vielleicht kann ich bei dir ja was lernen
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 14.12.2010, 11:56
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Naja, ich habe da keine bestimmte Regel oder sowas.

Ich versuche sämtliche Variablen so lokal wie möglich zu halten und sämtliche Werte, welche Konfiguration oder Resourcen oder ähnliches sind im Objekt bzw. der Klasse zu speichern.

Als Beispiel hier mal die Attribute meines abstrakten Controllers:
PHP-Code:
protected $acl;
protected 
$auth;
protected 
$authAdapters = array();
protected 
$config;
protected 
$controllerKey;
protected 
$dbConnections = array();
protected 
$frontcontroller;
protected 
$messages = array();
protected 
$models = array();
protected 
$refClass;
protected 
$request;
protected 
$response;
protected 
$router;
protected 
$session;
protected 
$view
Hier die des Frontcontrollers welcher natürlich von AbstractController erbt:
PHP-Code:
protected $controllers = array();
protected 
$layoutEnabled true;
protected 
$preDispatchFilter;
protected 
$postDispatchFilter
Nun werden natürlich nicht sämtliche Attribute ständig verwendet, am Beispiel des Request-Objektes einmal verdeutlicht:

Das Request-Objekt, sowie sämtliche Controller, werden (standardmäßig) im Frontcontroller erstellt, dabei wird den Controllern die Instanz des Frontcontrollers übergeben.

Nun sieht die Methode getRequest() im AbstractController folgendermaßen aus (hier vereinfacht):
PHP-Code:
public function getRequest() {
    if (
$this->request !== null) {
        return 
$this->request;
    }
    
    if ((
$fc $this->getFrontcontroller()) !== null) {
        if (
$fc !== $this) { // avoid recursion
            
return $fc->getRequest();
        }
    }
    
    return 
null;

Auf die Art habe ich sämtliche Getter implementiert, so dass im Controller ein simples "$this->getRequest()" ausreicht, um an das richtige Objekt zu gelangen, ebenso wäre es aber möglich bestimmten Controllern ein anderes Request-Objekt zu geben.
Im Detail wäre es wohl zu viel alles zu erklären, hier nur mal als Idee.

Hier kommen imo nur Attribute in Frage, alles andere wäre unnötig kompliziert und redundant.

Ein anderes Beispiel wäre meine DbTable-Klasse, wo ich ein wenig von Zend abgeschaut habe, hier habe ich die Attribute:
PHP-Code:
protected $dbConnection;
protected 
$name;
protected 
$primary
In $dbConnection wird die aktuelle Datenbankverbindung gespeichert (inkl. Datenbank), $name enthält den Tabellennamen und $primary den Namen der Spalte, welche den Primärschlüssel angibt.
So kann man so schön kurze, sowie unabhängige Methoden wie z.B.:
PHP-Code:
public function find($primary) {
    return 
$this->fetch(array($this->primary => $primary));

schreiben, also z.B.
PHP-Code:
$commentModel = new DbTable($dbConnection'comments''id');
// ...
$comment $commentModel->find(1); 
anstelle von
PHP-Code:
$commentModel = new DbTable($dbConnection'comments''id');
// ...
$comment $commentModel->fetch(array('id' => 1)); 
Der Code wird imo generischer und besser wartbar.

Dazu sollte ich aber noch sagen, dass bei mir die Angaben zum Tabellennamen und Primärschlüssel ebensowenig im Code stehen (das habe ich hier nur kurz so gemacht), sondern per Config gesetzt werden.

So kann der Primärschlüssel z.B. von "id" nach "commentId" geändert werden, die Änderung wird in der Config-Datei vorgenommen und man ist fertig.
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ausgabe geschieht nur einmal Benutzername Serveradministration und serverseitige Scripte 0 12.05.2011 16:59
wo ist OOP für php sinnvoll? sqrack Serveradministration und serverseitige Scripte 5 12.09.2010 17:23
PHP OOP: Datenbankeintrag Klasse - ein paar theoretische Überlegungen braindead Serveradministration und serverseitige Scripte 17 24.07.2009 07:29
PHP: zweidim. Array mit eindimensionaler Struktur in Eindim. Array umwandeln? braindead Serveradministration und serverseitige Scripte 4 08.07.2008 14:31
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 19:09


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:38 Uhr.