php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.01.2005, 22:15  
Gast
 
Beiträge: n/a
Standard Problem mit Klassen und Objekten... (PHP 4.3.3 spezifisch??)

Moin Leutz
Also habe volgendes Problem:
Bei einer Klasse, die ich zur Zeit am schreiben bin, muss ich ein Objekt der Klasse in einer Funktion eben dieser Klasse erzeugen.
(Vielleicht hätt ich ne Klasse auslassen sollen)

Nun bringt mir das PHP beim ausführen des ganzen zwar keinen Fehler sondern überspringt einfach diese Anweisung.

Gibt es eine Möglichkeit das der das trotzdem macht? Lohnt sich wegen solcher Feinheiten der Umstieg auf PHP 5?

Naja wie auch immer, wäre für eure Hilfe dankbar!
Greetz Thorleif82
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.01.2005, 23:06  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard

Zeig mal dein Code.
Corvin ist offline  
Alt 30.01.2005, 23:29  
Gast
 
Beiträge: n/a
Standard

Ups
Tuts auch nur ein Beispiel?
Sitze grad nicht an dem Rechner auf dem das drauf ist

PHP-Code:
class CSite
{
      var 
$einige_Variablen;

     function 
bsp_function()
     {
         
$locator = new CSite($einige_variablen);
      }
     function 
CSite($einige_variablen)
     {
         
$this->einige_variablen einige_variablen;
        
$this->bsp_function();
      }

Die Klasse ist im eigentlichen Skript so aufgebaut das es reicht ein Objekt dieser Klasse zu deklarieren, ihm dabei die für die laufzeit wichtigen Varaiblen zu übergeben um eine ganze Site relativ flott zu generieren.
Das ich in einer Member-Funktion noch ein Objekt der gleichen Klasse erzeuge hängt damit zu sammen dass ich, je nach dem was ich als Get reinbekomme XML-dateien mit einem beliebigen Inhalt (und struktur) auswerten muss.
Bei dem XML-tag

<LOCATOR name="beispiel">1</LOCATOR>

wird auf eine andere XML-Datei mit der ID 1 verwiesen die ich dann genau so auswerten muss.
Bekomme ich dann aber als GET beispiel=2 ist die Datei die ausgerwertet werden muss eben die mit der ID 2.
Im Grunde soll das Skript das bis in eine beliebige Tiefe machen.

Ich hoffe das reicht fürs erste ansonsten muss ich halt noch mal schnell den anderen Rechner holen gehn.

Greetz Thorleif
 
Alt 30.01.2005, 23:52  
Benutzer
 
Registriert seit: 02.01.2005
Beiträge: 49
Andun
Andun eine Nachricht über ICQ schicken
Standard

Also ich würde es mal anders machen als sonst und diesen Thread ein wenig raufschieben also nach fortgeschritten, oder so.

Zum Thema kann ich leider nicht behilflich sein.
Andun ist offline  
Alt 31.01.2005, 00:37  
Gast
 
Beiträge: n/a
Standard

Hm.. vielleicht hast du Recht @Andun
Hatte es eigentlich hier rein gepostet weil der "komplizierte" Teil völlig Problemlos läuft.
Also die Auswertung und Ausgabe der in den XML-Datein enthaltenen Daten funktioniert, ebenso die anderen Funktionen der Klasse laufen alle reibungslos.
Das einzige Problem ist halt dass sich die Klasse zwar anscheinend selber kennt aber PHP sich weigert ein weiteres Objekt der Klasse inerhalb einer ihrer Memberfunktionen zu erstellen.

greetz
 
Alt 31.01.2005, 01:46  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

trotzdem wäre code mal gut - das ganze sieht schwer nach einem tippfehler im code aus.
du solltest evtl. die klasse mal durch einen debugger laufen lassen.
axo ist offline  
Alt 31.01.2005, 10:02  
Gast
 
Beiträge: n/a
Standard

PHP-Code:
function bsp_function()
     {
          
// könnte es sein, dass an dieser Stelle die Classe CSite gar nicht bekannt ist?
         
$locator = new CSite($einige_variablen);

         
// was kommt hier, wenn du ausgeben würdest:
         
echo gettype($locator);
      } 

Du könntest Versuchen in der PHP-Datei vor der Classen-Definition eine Test-Variable zu deklarieren. und dann in der Klasse dann auf diese zuzugreifen.
PHP-Code:
$testvar "test";
class 
CSite

      var 
$einige_Variablen;

     function 
bsp_function()
     {
         echo 
"testen wir mal " $testvar;
         
$locator = new CSite($einige_variablen);
      }
[...]

Und wenn er die $testvar nicht kennt, würde ich versuchen ein require_once("dateiname.php") in die Funktion bsp_function() mit reinzupacken.

Alles Vermutungen, aber vielleicht könnte es ja richtig sein.
Der Hoecker bei Genial Daneben labert auch viel sch***e und es ist meistens richtig
 
Alt 31.01.2005, 10:53  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Thorleif82
Ups
Tuts auch nur ein Beispiel?
PHP-Code:
class CSite
{
     var 
$einige_Variablen;
     function 
bsp_function()
     {
         
$locator = new CSite($einige_variablen); # <---
     
}

Was soll dabei herauskommen? Ab Ende der Methode kennt kein Schwanz mehr $locator. $einige_variablen sind ebenfalls nicht definiert.
 
Alt 31.01.2005, 20:44  
Gast
 
Beiträge: n/a
Standard

@meikel
Das nach demm Ende der Methode $locator unbekannt ist, ist einer der Gründe warum ich das in eine Methode gepackt habe, dannch brauche ich locator nicht mehr.


Axo hatte mich beim Bsp. vertippt. sollte in der Methode eigentlich
PHP-Code:
$locator = new CSite($this->einige_variablen); 
heissen.

So hab jetzt den Quelltext der Klasse zur Hand.

PHP-Code:
class CSite
{
    var 
$cfg;
    var 
$site_id;
    var 
$template;
    var 
$template_file;
    var 
$site;
    var 
$path_to_class_CSite;
    var 
$type;
    var 
$atributes;
    
############ Konfiguration###################
    
function get_cfg(&$cfg)
    {
        require(
$this->path_to_class_CSite."get_cfg.php");
    }
    function 
stdtag(&$name, &$atributes)
    {
        echo 
"<".$name;
        while(list(
$option$value) = each($atributes))
        {
            echo 
" ".$option."=\"".$value."\"";
        }
        echo 
">";
    }
    
######## Tag-Spezifisch #################
    
function is_locator(&$atributes)
    {
        
#print_r($atributes);
        
$this->atributes =& $atributes;
        
$this->type ="LOCATOR";
    }

    function 
is_css($atributes)
    {
        
$this->atributes=& $atributes;
        
$this->type "CSS";
    }
    function 
css_handler(&$datei_namen)
    {
        
$css="
        <link rel=\"stylesheet\" type=\"text/css\" href=\""
.trim($datei_namen)."\" />
        "
;
        echo(
$css);
    }
    
####### Template-Auswertung #############
    
function template_startElement(&$parser, &$name, &$atributes)
    {
        switch(
$name)
        {
            case 
"LOCATOR":
                
$this->is_locator($atributes);
            break;
            case 
"CSS":
                
$this->is_css($atributes);
            break;
            case 
"IMG":
            break;
            default :
                
$this->stdtag($name$atributes);
            break;
        }
        
$this->type =& $name;
    }
    function 
template_endElement(&$parser, &$name)
    {
        if((
$this->type != "LOCATOR")&&($this->type != "CSS")&&($this->type!="IMG"))
        {
            echo 
"</".$name.">";
        }
        
$this->type =false;
    }
    function 
template_characterdata(&$rid,&$daten)
    {
        switch(
$this->type)
        {
            case 
"LOCATOR":
                
$this->basic_locator_handler($daten);
            break;
            case 
"CSS":
                
$this->css_handler($daten);
            break;
            default :
                echo(
$daten);
            break;
        }
    }
    function 
template()
    {
        require(
$this->path_to_class_CSite."template.php");
    }

    function 
get_template_from_file()
    {
        require(
$this->path_to_class_CSite."get_template_from_file.php");
        return(
$template);
    }
    
############# Locator-Handling ######################
    
function basic_locator_handler(&$daten)
    {
        
#print_r($this->atributes);
        
$locator_content =$this->atributes[$std_id];
        
$locator_content =$_GET[$this->atributes["NAME"]];
        if(
$locator_content)
        {
            
$this->atributes["TYPE"] = strtolower($this->atributes["TYPE"]);
            switch(
$this->atributes["TYPE"])
            {
                case 
"all":
                    
$this->locator_all($locator_content);
                break;
            }
        }
        else
        {
            echo(
$daten);
        }
    }
######################################
################## Um diese Methode geht es in dem Thread##############
    
function locator_all(&$site_id)
    {
        
$locator = new  CSite($this->cfg$this->template$this->path_to_class_CSite);
        echo(
"Erfolg");
    }
#########################################
    ############# Fehler-Behandlungsrutinen ##############
    
function fatal_error($count)
    {
        require(
$this->path_to_class_CSite."fatal_error.php");
    }
    function 
error($count)
    {
        echo(
$count);
    }
    
########## Konstructor ######################
    
function CSite(&$cfg,$template$path_to_class_CSite)
    {
        
$this->type false;
        
$this->path_to_class_CSite =& $path_to_class_CSite;
        
$this->get_cfg($cfg);
        
$this->template_file =& $template;
        
$this->template();
        
#$this->test_template();
        #echo("ende");
    
}

Ignoriert einfach Rechtschreibfehler in den Kommentaren

Greetz and thx für eure (schon gegebenen und künftigen) Antworten
 
Alt 31.01.2005, 22:28  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Thorleif82
@meikel
Das nach demm Ende der Methode $locator unbekannt ist, ist einer der Gründe warum ich das in eine Methode gepackt habe, dannch brauche ich locator nicht mehr.
Falsch:
PHP-Code:
<?php
    
function locator_all(&$site_id)
    {
        
$locator = new  CSite($this->cfg$this->template$this->path_to_class_CSite);
        echo(
"Erfolg");
    }
?>
Du registrierst eine neue Instanz in einer lokalen Variablen, die nach Ende der Methode vergessen wird. Wenn, dann so:
Code:
<?php
	function locator_all(&$site_id)
	{
		return & new  CSite($this->cfg, $this->template, $this->path_to_class_CSite);
	}
?>
Das & vor dem new ist bei PHP4 notwendig (siehe Handbuch).
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
beginn mit oop und klassen. aller anfang ist schwer... :( Promaetheus PHP Tipps 2006 1 22.06.2006 18:10
Problem mit Klassen Freeaak PHP Tipps 2006 16 15.06.2006 13:43
Klassen und OOP Problem PHP-Fortgeschrittene 3 08.09.2005 10:37
Problem mit Objekten in PHP-GTK PHP Tipps 2005 28 25.02.2005 16:08

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
2005 fehler 4.3.3, new csite problem

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:01 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.