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 29-09-2006, 11:18
Proggy
 Junior Member
Links : Onlinestatus : Proggy ist offline
Registriert seit: Oct 2003
Beiträge: 163
Proggy ist zur Zeit noch ein unbeschriebenes Blatt
Standard [OOP] andere Klasse an aktuelle Klasse anhängen

Hallo,

ich steh nen bissel im Moment aufm Schlauch, weil ich folgendes Problem habe:

Und zwar habe ich eine Layoutklasse, die mit Div Container usw. gefüttert werden soll. So nun habe ich für die Html Sachen eigene Klassen sprich: DivContainer.class.php usw.

So jetzt würde ich gerne zur Laufzeit, an das Layoutobjekt, die Klassen ranhängen. Beispiel:

PHP-Code:
$oLayout = new Layout();
$oLayout->addDivContainer($parameter); //wir geben eine externe Klasse zurück DivContainer
$oLayout->getContent(); 
Geht das überhaupt mit PHP?

Im Moment sieht das Ganze ungefähr so aus:

PHP-Code:
class Layout {
[....]
function 
addDivContainer() {
        
$this =& new DivContainer($this$this->oDb);
        return 
$oDiv;
    } 
[...]
}

class 
DivContainer {
[...]
    function &
__construct(&$oHtml, &$oDb) {
        
$this->oDb =& $oDb;
        
$this->oRDb =& $oDb;
        
$this->oWDb =& $oDb;
        
$this->oHtml =& $oHtml;
    }
[...]

Mit Zitat antworten
  #2 (permalink)  
Alt 29-09-2006, 13:37
ArSeN
 Registrierter Benutzer
Links : Onlinestatus : ArSeN ist offline
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 1.052
ArSeN ist zur Zeit noch ein unbeschriebenes Blatt
ArSeN eine Nachricht über ICQ schicken ArSeN eine Nachricht über AIM schicken ArSeN eine Nachricht über Yahoo! schicken
Standard

Ich versteh nich genau was du meinst, aber aus "Klasse an andere Klasse anhängen" schließe ich immer auf Vererbung.

Falls du das nicht meinst, beschreibe dein Problem bitte etwas genauer für Idioten wie mich.
__________________
Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.
Mit Zitat antworten
  #3 (permalink)  
Alt 29-09-2006, 13:44
Proggy
 Junior Member
Links : Onlinestatus : Proggy ist offline
Registriert seit: Oct 2003
Beiträge: 163
Proggy ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von ArSeN
Ich versteh nich genau was du meinst, aber aus "Klasse an andere Klasse anhängen" schließe ich immer auf Vererbung.

Falls du das nicht meinst, beschreibe dein Problem bitte etwas genauer für Idioten wie mich.
Hy,

ich möchte gerne, dass wenn ich die Methode addDivContainer() aufrufe, die Klasse DivContainer innitialisiert wird und die Methoden, von DivContainer zu Layout gehören. Ungefähr so:

PHP-Code:
$oLayout = new Layout();
$oLayout->addDivContainer();
$oLayout->addDivStart(); //<-- ist eine Methode aus DivContainer
$oLayout->addDivEnde(); //<-- ist eine Methode aus DivContainer
$oLayout->getContent(); //<-- ist eine Methode aus Layout 
Mit Zitat antworten
  #4 (permalink)  
Alt 29-09-2006, 13:46
hall
 Registrierter Benutzer
Links : Onlinestatus : hall ist offline
Registriert seit: Jun 2004
Ort: Berlin
Beiträge: 818
hall befindet sich auf einem aufstrebenden Ast
Standard

vererbung?

http://ffm.junetz.de/members/reeg/DS...00000000000000
__________________
mfg
Mit Zitat antworten
  #5 (permalink)  
Alt 29-09-2006, 15:15
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

ich hoffe, dass ich die Problem richtig verstanden habe.
ich habe dir ein beispiel geschrieben, wie man ein object erweitern kann

//es ist abhängig von php-version, da die Methoden __call und __get bei
//älteren Versionen keine Wirkung haben
PHP-Code:
class foo{
  var 
$call;
  var 
$foomember="foomember";
  function 
add($object){$this->call=$object;}
  function 
__get($name){ return isset($this->$name)?$this->$name:$this->call->$name;}
  function 
__call($funcname,$args){
    if(
method_exists $this$funcname))
    return 
call_user_func_array(array(&$this$funcname), $args); 
   return 
call_user_func_array(array(&$this->call$funcname), $args);
  }
  function 
mult($a,$b){return $a*$b;}
  
}
class 
probe{
  var 
$probe="das ist eine Probe";
  function 
getMember($a,$b){return $this->probe." : ".$a." : ".$b;}
}

//TEST
$pr= new foo;
$pr->add(new probe());
echo 
$pr->mult(2,2)."<br />";
echo 
$pr->getMember("mit","parameter")."<br />";
echo 
$pr->probe
du kannst natürlich die Variable call zu einer Liste machen und bei entsprechender anpassung von __call und __get unbegrenzte Erweiterung von Objecten erlauben.
Eine Problem kann natürlich vorkommen, wenn die Objecte die functionen oder Member mit gleichem Namen haben
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #6 (permalink)  
Alt 29-09-2006, 15:58
ArSeN
 Registrierter Benutzer
Links : Onlinestatus : ArSeN ist offline
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 1.052
ArSeN ist zur Zeit noch ein unbeschriebenes Blatt
ArSeN eine Nachricht über ICQ schicken ArSeN eine Nachricht über AIM schicken ArSeN eine Nachricht über Yahoo! schicken
Standard

Ich steh irgendwie immernoch aufm Schlauch. Wozu soll das ganze denn gut sein?
__________________
Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.
Mit Zitat antworten
  #7 (permalink)  
Alt 29-09-2006, 16:28
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

viel Spass beim Schlauchstehen
__________________
Slava
bituniverse.com

Geändert von Slava (29-09-2006 um 16:34 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 29-09-2006, 16:49
ArSeN
 Registrierter Benutzer
Links : Onlinestatus : ArSeN ist offline
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 1.052
ArSeN ist zur Zeit noch ein unbeschriebenes Blatt
ArSeN eine Nachricht über ICQ schicken ArSeN eine Nachricht über AIM schicken ArSeN eine Nachricht über Yahoo! schicken
Standard

Danke
__________________
Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.
Mit Zitat antworten
  #9 (permalink)  
Alt 29-09-2006, 17:20
Proggy
 Junior Member
Links : Onlinestatus : Proggy ist offline
Registriert seit: Oct 2003
Beiträge: 163
Proggy ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von ArSeN
Ich steh irgendwie immernoch aufm Schlauch. Wozu soll das ganze denn gut sein?
Also ich brauch das an sich, um mein SeitenLayout zu bauen, will dazu keine Templateengine nehmen. So und da nen HTML Layout aus mehreren Teilen besteht (in der Regel), Formular, Tabellen, Divs. usw. dachte ich mir, dass ganze in mehrere Klassen zu splitten: DivContainer, FormContainer usw. so und da ich in der Layoutklasse, eine Eigenschaft habe, die das Layout am Ende zusammen baut ($sHtml), wollte ich nicht umbedingt, dass ich die Klassen extra im Skript (index.php) innitialisiere und denn den Kram an die Layoutklasse weitergeben. So ist das ganze auch recht leicht erweiterbar denke ich, weil ich halt durch eine MEthode, auf andere Klassen direkt zugreifen kann. Ob das ganze nun umbedingt sicher ist, weiß ich aber noch net...

Achso und Slava, danke werd das gleich mal testen.
Mit Zitat antworten
  #10 (permalink)  
Alt 29-09-2006, 17:55
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von ArSeN
Danke
@ArSeN das war nur ein Witz.
Es war einfach komisch
@Proggy steht auf dem Schlauch, weil er nicht mehr weiter kommt und du weil du nicht weist wofür das gut sein könnte.

Da ich heute auch irgendwie auf dem Schlauch stehe sind wir schon zu dritt
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #11 (permalink)  
Alt 29-09-2006, 20:39
Proggy
 Junior Member
Links : Onlinestatus : Proggy ist offline
Registriert seit: Oct 2003
Beiträge: 163
Proggy ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Slava
@ArSeN das war nur ein Witz.
Es war einfach komisch
@Proggy steht auf dem Schlauch, weil er nicht mehr weiter kommt und du weil du nicht weist wofür das gut sein könnte.

Da ich heute auch irgendwie auf dem Schlauch stehe sind wir schon zu dritt
Okay Slava, hab die Klasse mal nen bissel erweitert. Reicht fürn Anfang, werd sie noch dahingehend verändern, dass die Klasse meckert, wenn Methoden und Member, mehrmals vorkommen. Kann ich ja denn auch posten.

PHP-Code:
class ExtendObject{
    var 
$aCall;
    function 
add($oObject){
        
$this->aCall[] = $oObject;
    }
    function 
__get($sName){
        if(isset(
$this->$sName)) {
            return 
$this->$sName;
        }
        foreach (
$this->aCall as $oVal) {
            if(isset(
$oVal->$sName)) {
                return 
$oVal->$sName;
            }
        }
    }
    function 
__call($sFuncname,$aArgs){
        if(
method_exists($this$sFuncname)) {
            return 
call_user_func_array(array(&$this$sFuncname), $aArgs);
        }
        foreach (
$this->aCall as $oVal) {
            if(
method_exists($oVal$sFuncname)){
                return 
call_user_func_array(array(&$oVal$sFuncname), $aArgs);
            }
        }
    }

Mit Zitat antworten
  #12 (permalink)  
Alt 29-09-2006, 21:00
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

so direk sehe ich nicht, dass es meckern muss, aber es wird die Methode, die zuerst geschnappt wurde ausgeführt.
wenn da aber andere Parameter vorkommen, dann hast du natürlich Pech.

Allgemein würde ich dir aber empfehlen mit der Spielerei aufhören und die vorgesehene Vererbungsmechanismen zu benutzen.
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #13 (permalink)  
Alt 29-09-2006, 21:16
Proggy
 Junior Member
Links : Onlinestatus : Proggy ist offline
Registriert seit: Oct 2003
Beiträge: 163
Proggy ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Machs jetzt doch anders, innitialisiere, die Container, vorher und pack denn, den Htmlkram in die Layoutklasse. Aber kann ja nie schaden, solche Spielereien, in seinem Repo zu haben...
Mit Zitat antworten
  #14 (permalink)  
Alt 30-09-2006, 20:35
Alrik
 Member
Links : Onlinestatus : Alrik ist offline
Registriert seit: Jan 2006
Beiträge: 304
Alrik ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,

Das was du vorhast lässt sich auch so lösen, wie du es eigentlich wolltest.

$oLayout->addDivStart(); //<-- ist eine Methode aus DivContainer
$oLayout->addDivEnde(); //<-- ist eine Methode aus DivContainer
PHP-Code:
class Layout
{
public function 
addDivContainer($container)
{
$this->container $container;
}

public function 
addDivStart($parameter
{
    
$this->container->addDivStart($parameter);
}
public function 
addDivEnde($parameter)
{
   
$this->container->addDivEnde($parameter);
}

public function 
getContent()
{}

Mehr dazu findest du im Decorator-Pattern.

Gruß Thomas
Mit Zitat antworten
  #15 (permalink)  
Alt 30-09-2006, 21:31
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

so wird es allgemein gemacht schon aus dem grund, dass viele Programmiersprachen gar nicht anderes können.
auf diese weise werden auch in Java die funktionalitäten von den Klassen die keine verwandschaft haben programmiert.
PHP bietet so eine Möglichkeit und genau aus diesen Grunden wurden die Methoden __set, __get und __call entwickelt um die überschreibung von Methoden und Eigentschaften von Hand zu sparen.
EDIT:
zum verdeutlichen mache ich ein Beispiel

die Javaentwickler stehen auf seter und geter Methoden, dafür freuen Sie sich, dass eine Programmierumgebung ein Tool zum automatischen erstellen von set und get Methoden erlaubt.
über die Reflections API ist es nicht so einfach eine classe um eine dynamische Methode oder eigenschaft zu erweitern.

und so kann ich es in PHP machen:
PHP-Code:
//ich will mir geter und seter sparen
//und beliebige variablen zum laufzeit wie in einem array in meiner Classe
//zu erstellen

class SetGet_ersparen{
  
//ich will dynamisch die variablen erzeugen
 
function __set($name$value){$this->$name=$value;}
 function 
__call($funcname,$args){
   
//wenn ich diese function habe, dann bekommst du sie auch
    
if(method_exists $this$funcname))
    return 
call_user_func_array(array(&$this$funcname), $args);
    
//das werden geter methoden;
    
$nam=substr($funcname,3);
    if(
strpos($funcname,"get")===0){
      
      if(isset(
$this->$nam))return $this->$nam;
    }elseif(
strpos($funcname,"set")===0){
      
$this->$nam=$args[0];
    }
    else return 
null;
 } 
}

//TEST
class Bequem extends SetGet_ersparen{
 
//eine Eigenschaft zum testen
  
var $probevar="locale variable \$probevar";
}
//los geht's
$B=new Bequem;
echo 
$B->getprobevar()."<br />";
$B->erfunden="erfunden";
echo 
$B->geterfunden()."<br />";
$B->setIrgendwas("ich bin irgendwas");
echo 
$B->Irgendwas
__________________
Slava
bituniverse.com

Geändert von Slava (30-09-2006 um 22:25 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

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:58 Uhr.