php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 17-07-2007, 03:42
JulietteSierra
 Newbie
Links : Onlinestatus : JulietteSierra ist offline
Registriert seit: Mar 2006
Ort: Germany
Beiträge: 4
JulietteSierra ist zur Zeit noch ein unbeschriebenes Blatt
Question Klassenübergreifender Zugruff auf Variablen

Hallo liebe Community,

ich habe erst vor kurzem begonnen mich mit der OOP in PHP zu beschäftigen. Ich bin auf eure Antworten gespannt, da mir die Lösung irgenwie verwehrt bleibt.

PHP-Code:
class CMain() {

    var 
Array1 = array();
    var 
Array2 = array();

    var 
ObjectBearbeiten = new CBearbeiten();
// class CMain 
PHP-Code:
class CBearbeiten() {
    function 
macheWasFunc1() {
        
bearbeite Array1 aus Klasse CMain aber wie
        bearbeite Array2 aus Klasse CMain 
aber wie
    
// function macheWasFunc1()

    
function macheWasFunc2() {
        
bearbeite Array1 aus Klasse CMain aber wie
        bearbeite Array2 aus Klasse CMain 
aber wie
    
// function macheWasFunc2()
// class CBearbeiten 
So sind die Klassen gerade verteilt, oder sollen sie. Das Problem welches ich nicht lösen kann ist, dass in CBearbeiten::macheWasFuncX beide Variablen CMain::Array1 und CMain::Array1 verändert werden sollen.

Das ganze ist -für mich- so kompliziert, weil ich eigentlich die beiden Arrays validieren und später bearbeiten möchte. Ich will validieren und bearbeiten in zwei verschiedene Funktionen auslagern, da sich die Länge und Inhalte der Arrays je nach aufgerufener Seite ändern.

Leider sieht es dann aber so aus, dass ich an einer Stelle eine Switch-Anweisung habe, die Abfragt, welche keys zulässig sind. In einer anderern Funktion ist eine zweite Switch-Anweisung mit genau den gleichen Cases, die aber Code zum verändern der Arrays enthält.

Ärgerlich ist jetzt die Tatsache, dass ich den Code an zwei Stellen ändern muß, wenn sich die Keys verändern (z.B. weil ich einen Rechtschreibfehler hatte.). Meine Idee war jetzt es irgenwie hinzubekommen, dass ich die Klassen habe, in denen Methoden zum Bearbeiten von Array1 und Array2 existieren.

Grob skizziert aus:

PHP-Code:
switch ($key) {
    case 
'BLA_1':
        
validieren
        
break;
    case 
'BLA_2':
        
validieren
        
break;
    case 
'BLA_3':
        
validieren
        
break;
// switch
  
:
  :
  :
switch (
$key) {
    case 
'BLA_1':
        
bearbeiten
        
break;
    case 
'BLA_2':
        
bearbeiten
        
break;
    case 
'BLA_3':
        
bearbeiten
        
break;
// switch 
sollte etwas werden bei dem ich den Source nur noch an einer Stelle ändern muss. Ich hoffte das mit Klassen erledigen zu können, bei der ich von einer Abstrakten Basisklasse ableite, die beide Funktionen bearbeiten und validieren enthält. Die überschreibenden Klassen sollten dann nur noch für jeden einzelnen Key einmal geschrieben werden und irgendwie (?) an die CMain angefügt werden.

Ich hoffe, ich habe es vernünftig rüber gebracht. Für Lösungvorschläge bin ich vollkommen offen, da ich leider die Lösung nicht erkenne.

mfg
JS
__________________
Rather to be a mad genius than an usual idiot.
Mit Zitat antworten
  #2 (permalink)  
Alt 17-07-2007, 09:30
jens76
 Member
Links : Onlinestatus : jens76 ist offline
Registriert seit: Dec 2004
Beiträge: 328
jens76 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

also wenn es dir verwehrt bleibt solltest du es auch lassen!

aber vielleicht hilft dir "parent" weiter...

PHP-Code:
class A
{
    function 
example()
    {
        echo 
"I am A::example() and provide basic functionality.<br>\n";
    }
}

class 
extends A
{
    function 
example()
    {
        echo 
"I am B::example() and provide additional functionality.<br>\n";
        
parent::example();
    }
}

$b = new B;

// Dies ruft B::example() auf, welches wiederum A::example() aufruft.
$b->example(); 
Mit Zitat antworten
  #3 (permalink)  
Alt 17-07-2007, 10:31
RanzigeMilch
 Registrierter Benutzer
Links : Onlinestatus : RanzigeMilch ist offline
Registriert seit: May 2005
Ort: Darmstadt
Beiträge: 757
RanzigeMilch ist zur Zeit noch ein unbeschriebenes Blatt
RanzigeMilch eine Nachricht über ICQ schicken
Standard

jo also wenn beide funktionen nacheinander ausgeführt werden dürfen geht des so
ansonsten kannste auch mit call_user_func() arbeiten.
da könntest du vor dem swich entscheiden welche funktion jetzt dran ist und diese dann mit call_user_func() ausm switch heraus aufrufen..

oder ich hab dich total falsch verstanden
__________________
Die Milch bleibt ranzig!
Mit Zitat antworten
  #4 (permalink)  
Alt 17-07-2007, 10:38
jens76
 Member
Links : Onlinestatus : jens76 ist offline
Registriert seit: Dec 2004
Beiträge: 328
jens76 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

call_user_func brauchst du aber nur wenn du die funktionen dynamisch aus einer variable aufrufen willst.
wenn nicht dann schreib den funktionsnamen in den switch.
Mit Zitat antworten
  #5 (permalink)  
Alt 17-07-2007, 10:47
RanzigeMilch
 Registrierter Benutzer
Links : Onlinestatus : RanzigeMilch ist offline
Registriert seit: May 2005
Ort: Darmstadt
Beiträge: 757
RanzigeMilch ist zur Zeit noch ein unbeschriebenes Blatt
RanzigeMilch eine Nachricht über ICQ schicken
Standard

äh jo ich dachte genau das ist ihr problem oO
(wobei du recht hast das sie die überprüfung welche funktion es sein soll auch in jeder caseanweisung machen könnte)
__________________
Die Milch bleibt ranzig!
Mit Zitat antworten
  #6 (permalink)  
Alt 17-07-2007, 14:05
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das Problem ist das du OOP irgendwie noch nicht richtig verstanden hast.
PHP-Code:
var ObjectBearbeiten = new CBearbeiten(); 
Das ist irgendwie Quatsch. Zu deinem Problem - du willst ein Array erst validieren und dann (seperat) editieren. Warum kannst du das nicht gleich in einem machen? Ansonsten ist der Ansatz call_user_func_array eine Idee.
PHP-Code:
function passArray $array$function ) {
   switch {
      case 
'...':
         
$array call_user_func_array $function, array ( $array ) );
         break;
   }

Als $function kann auch ein Array angeben werden um Klassen anzusprechen - array ( $classPointer, 'Funktion' );.
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #7 (permalink)  
Alt 17-07-2007, 14:47
RanzigeMilch
 Registrierter Benutzer
Links : Onlinestatus : RanzigeMilch ist offline
Registriert seit: May 2005
Ort: Darmstadt
Beiträge: 757
RanzigeMilch ist zur Zeit noch ein unbeschriebenes Blatt
RanzigeMilch eine Nachricht über ICQ schicken
Standard

ich weiß zwar net warum sie call_user_func_array() brauchen soll aber des ist ja sonst genau das was ich mein
__________________
Die Milch bleibt ranzig!
Mit Zitat antworten
  #8 (permalink)  
Alt 17-07-2007, 20:36
JulietteSierra
 Newbie
Links : Onlinestatus : JulietteSierra ist offline
Registriert seit: Mar 2006
Ort: Germany
Beiträge: 4
JulietteSierra ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

danke für eure Antworten.

ich habe mich entschieden, es jetzt so zu Programmieren

PHP-Code:

requiere_once 
'Funktionen.php';

var 
$arPossibilities = array();
$arPossibilities['case1'] = 'FunktionCase1';
$arPossibilities['case2'] = 'FunktionCase2';
  :
  :
if (  
function_exists$arPossibilities[$text] )  ) {
    
call_user_func ($arPossibilities[$text]);
// if 
Danke für die Tipps, ich werde es dann daheim ausprobieren.
__________________
Rather to be a mad genius than an usual idiot.

Geändert von JulietteSierra (18-07-2007 um 01:03 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:48 Uhr.