SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Das Zend Framework

Das Zend Framework zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 05.07.2006, 20:54:08
Balthazzar Balthazzar ist offline
Anfänger
 
Registriert seit: Mar 2006
Beiträge: 9
[gelöst] Kann eine Klasse in einer Eigenschaft ein Objekt, einer anderen Klasse in...

Hallo Leute!

Meine Frage ist wie im Titel:
Kann eine Klasse in einer Eigenschaft ein Objekt, einer anderen Klasse instanzieren?

Wenn ich den dazu gehörigen Code ausführe, sagt PHP mir dazu folgendes:
Code:
Fatal error: Call to a member function output() on a non-object in *.php on line *
Der Code ist folgender und dient dem Zweck HTML-Code an den Browser zu geben. (Hier wegen der Länge nur Ausschnittsweise, gekürzt und vereinfacht):

Die Methode der 1. Klasse, die das Objekt instanzieren soll:
PHP-Code:
<?php
    
function add_text($content) {
      
$this->content[] = new text($content);
    }
?>
Die Methode in der eine Methode auf dieses Objekt ausgeführt werden soll:
PHP-Code:
<?php
    
function output() {
      echo 
'<p>';
      
$contents $this->get_content();
      foreach(
$contents as $content) {
        
$content->output(); //hier passiert natürlich laut PHP der Fehler
      
}
      echo 
'</p>';
    }
?>
Normalerweise werden nicht nur <p>-Elemente ausgeben sondern auch andere anhand anderer Eigenschaften uns es werden auch noch diverse Attribute hinzugefügt.
Zu der Methode get_content(): Sie gibt lediglich die Eigenschaft Content zurück; im Prinzip wäre also auch $this->content; möglich.
Desweiteren können der Eigenschaft content auch wieder HTML-Elemente hinzugefügt werden mit Hilfe einer Methode, die diese ins Array content schiebt. Die muss ich ja einzeln instanzieren weil sie normalerweise Inhalt haben im Gegensatz zum Text.

Schließlich die Methode in der 2.Klasse die auf das Objekt, das in der 1. Klasse instanziert wird, angewendet werden soll:
PHP-Code:
    function output() {
       echo 
$this->content;
    } 
Gehört zu der 2.Klasse also keine Überladung.

Ja, das Problem ist nen bissl' kompiliziert :P.
Ich hoffe ihr könnt mich trotzdem verstehen.

Danke im Vorraus an alle die sich meinem Problem widmen.

Edit: Denke mal hab das falsche Topic erwischt oder ist das hier richtig aufgehoben?

Geändert von Balthazzar (05.07.2006 um 23:11:47 Uhr) Grund: var_dump() ->Das Ultimativ-Diagnostikum für PHP^^
Mit Zitat antworten
  #2  
Alt 05.07.2006, 20:58:37
Opendix Opendix ist offline
Senior Member
 
Registriert seit: Oct 2004
Ort: Werdenberg / Schweiz
Alter: 35
Beiträge: 1.476
AW: Kann eine Klasse in einer Eigenschaft ein Objekt, einer anderen Klasse instanzieren?

hä? ich versteh dein Problem net :S

also du hast 2 Klasse. (A und B)
PHP-Code:
class A
{
    private 
$vari;
    
    function 
add_text()
    {
        
$this -> vari = new B();
    }
}

class 
B
{
    function 
output()
    {
        
    }

und was willst du nun genau mit diesen beiden Klassen machen?
evtl bin ich auch bisschen schwer von begriff aber raffs grad net :P

btw. auf welcher zeile kommt den dieser Fehler?
__________________
Opendix lehnt jegliche Haftung für evtl. vorhandene Fehler in der Grammatik sowie der Satzstellung ab! Bitte wenden Sie sich an die Tastatur!

Betatester gesucht:
Skiclub Gams / CEVI Grabs

Geändert von Opendix (05.07.2006 um 20:59:33 Uhr)
Mit Zitat antworten
  #3  
Alt 05.07.2006, 21:37:37
Balthazzar Balthazzar ist offline
Anfänger
 
Registriert seit: Mar 2006
Beiträge: 9
AW: Kann eine Klasse in einer Eigenschaft ein Objekt, einer anderen Klasse instanzieren?

So ok dann mal tutti completti als Klassen ausgedrückt.
(eigentlich wollt ich nicht mals mehr pseudo-italienisch nach der niederlage gestern sprechen und schreiben ^^)
PHP-Code:
<?php 
class HTML {
  public 
$content = array();

  function 
add_text($content) {
    
$this->content[] = new text($content);
  }

  function 
add_content($content) {
    
$this->content[] = $content;
  }

  function 
output() {
    echo 
'<p>';
    
$contents $this->content;
    foreach(
$contents as $content) {
      
$content->output(); //hier passiert laut PHP der Fehler!!!!!!!
    
}
    echo 
'</p>';
  }
}

class 
text {
  public 
$content = array();

  function 
__construct($content) {
    
$this->content[] = $content;
  }

  function 
output() { 
    echo 
$this->content;
  }
}
$bla = new HTML;
$blub = new HTML;
$bla->add_content($blub);
$blub->add_text('Dieses Objekt bringt PHP zum scheitern!');
$bla->output();
?>
Ausgabe des ganzen ist:
Code:
<p><p>Array</p></p>
Wie zum Teufel kommt PHP nun darauf einfach "Array" auszugeben?

Hoffe nun weiß man was ich vorhabe.
Danke schonmal.
Mit Zitat antworten
  #4  
Alt 05.07.2006, 21:57:39
Opendix Opendix ist offline
Senior Member
 
Registriert seit: Oct 2004
Ort: Werdenberg / Schweiz
Alter: 35
Beiträge: 1.476
AW: Kann eine Klasse in einer Eigenschaft ein Objekt, einer anderen Klasse instanzieren?

ok jetzt hab ich verstanden!

also der Fehler kommt daher:
In der Klasse HTML(welche übrigens nicht wirklich den namens-konventionen entspricht..) hast du die Klassenvariabel $content welche selbst ein Array ist.

mit der Funktion add_text() fügst du nun einfach einen String hinzu!

nach deinem beiden add-funktionen hat die Klassenvariabel also folgenden inhalt:
$content[0]: Ein Objekt vom Typ HTML
$content[1]: Ein String

nun wenn du da output auf alle elemente anwendest ist klar, dass der Strign die Funktion output() nicht besitzt!

warum PHP da Array ausgibt ist auch klar... in der Klasse text ist $content wiederum ein Array. wenn du ein Array einfach mit echo $array ausgibst dann wird dir PHP immer "Array" ausgeben!

So hoffe konte dir helfen;)
__________________
Opendix lehnt jegliche Haftung für evtl. vorhandene Fehler in der Grammatik sowie der Satzstellung ab! Bitte wenden Sie sich an die Tastatur!

Betatester gesucht:
Skiclub Gams / CEVI Grabs
Mit Zitat antworten
  #5  
Alt 05.07.2006, 22:58:58
Balthazzar Balthazzar ist offline
Anfänger
 
Registriert seit: Mar 2006
Beiträge: 9
AW: Kann eine Klasse in einer Eigenschaft ein Objekt, einer anderen Klasse instanzieren?

Ich wollte mich schon immer einmal selbst zitieren:
Zitat:
Zitat von Balthazzar
PHP-Code:
<?php
$this
->content[] = new text($content);
?>
Aber ich erzeuge doch ein Objekt, welches ich ins Array content der Klasse HTML lege, die ich übrigens nur der Einfachheit nach so nannte (Aber hast natürlich recht mit den Namenskonventionen) ;).
Also kann doch im Array kein einfacher String liegen.
Vorallem weil ja die Methode output() von der Klasse text ausgeführt wird.

Mit dem Array hast du natürlich recht, ich vergaß das, als ich den Code auf ein Minimales herunterkürzte. ;)

Glaube ich experimentiere mal nen bissl' mit var_dump() rum. Dann müsste sich der Fehler finden lassen.

Danke schonmal soweit.
(Vielleicht ergeben sich ja weitere Probleme. Will es aber mal nicht hoffen. ;))

Edit: Hab Problem mit var_dump() gefunden nen echtes Ultimativ-Diagnostikum diese Funktion^^.

Geändert von Balthazzar (05.07.2006 um 23:09:50 Uhr)
Mit Zitat antworten
  #6  
Alt 06.07.2006, 00:06:22
Opendix Opendix ist offline
Senior Member
 
Registriert seit: Oct 2004
Ort: Werdenberg / Schweiz
Alter: 35
Beiträge: 1.476
AW: Kann eine Klasse in einer Eigenschaft ein Objekt, einer anderen Klasse instanzieren?

nun was wars? :)
__________________
Opendix lehnt jegliche Haftung für evtl. vorhandene Fehler in der Grammatik sowie der Satzstellung ab! Bitte wenden Sie sich an die Tastatur!

Betatester gesucht:
Skiclub Gams / CEVI Grabs
Mit Zitat antworten
  #7  
Alt 06.07.2006, 17:06:36
Balthazzar Balthazzar ist offline
Anfänger
 
Registriert seit: Mar 2006
Beiträge: 9
AW: Kann eine Klasse in einer Eigenschaft ein Objekt, einer anderen Klasse instanzieren?

Eigentlich nicht erwähnenswert und ich finde es auch peinlich,
habe ich doch eigentlich alles abgesucht auf Fehler bei der Erzeugung der Objekte.
Ich habe an die Methode add_content() eine falsche Variable per Parameter übergeben. Konnte es dann feststellen als ich mir den Inhalt von ein paar Variablen mit var_dump() ausgeben lies.
Ich hab natürlich direkt am Anfang daran gezweifelt das es generell nicht möglich wer ein Objekt in einer Eigenschaft zu instanzieren, aber es geht ohne Probleme.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Klasse in Klasse aufrufen wollenschlaeger PHP für Fortgeschrittene und Experten 4 14.07.2005 14:05:32
Andere Klasse aus Klasse aufrufen NanoCyte PHP für Fortgeschrittene und Experten 22 28.06.2004 22:24:53
Blätterfunktion als Klasse! Funjoy PHP Entwicklung und Softwaredesign 0 25.06.2004 00:45:04
Klasse als Funktionencontainer this::Funktion? Greg G PHP für Fortgeschrittene und Experten 3 19.02.2003 09:09:49


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


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt