php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.11.2004, 19:29  
Gast
 
Beiträge: n/a
Standard [Erledigt] Klon von Klasse intern erstellen - Referenzfehler?

Hi!

Ich habe das problem, dass ich gerade eine Klasse schreiben will die ein GtkPixmap "vereinfacht" aus einem xpm_d erstellt.
Wenn diese Pixmap einmal eingebunden wird in ein Gtk GUI, dann ist sie nichtmehr "verwertbar", dafür muss ich dann eine funktion "fetch_clone" haben, die eine kopie des eigenen Objektes zurückgibt, wegen der ID darf es aber kein exakter clone sein, da er auf die gleiche Resource verweisen würde. Daraus folgt, dass ich anhand der Daten nochmal das Objekt erstellen will und dann den Handle zurückgeben um so einen Clone zu erhalten, der aber nicht auf die Selben resourcen verweist.

Nur bekomme ich dabei immer diese Fehlermeldung:
Zitat:
Zitat von php4 Script Interpreter
Fatal error: Only variables can be passed by reference in D:\Programming\TeamOrg
a2\gui\gui_pixmap.class on line 46
PHP-Code:
//Ein xpm_d als Beispiel..
$xpm_d = array(
               
"16 16 6 1"" c None s None",
               
". c black""X c red",
               
"o c yellow""O c #808080",
               
"# c white",
               
"                 ",
               
"  ..             ",
               
"  ..XX.          ",
               
"  ..XXXXX.       ",
               
"  ..XXXXXXXX.    ",
               
" .ooXXXXXXXXX.   ",
               
" ..ooXXXXXXXXX.  ",
               
" .X.ooXXXXXXXXX. ",
               
" .XX.ooXXXXXX..  ",
               
"  .XX.ooXXX..#O  ",
               
"  .XX.oo..##OO.  ",
               
"  .XX..##OO..    ",
               
"  .X.#OO..       ",
               
"  ..O..          ",
               
"  ..             ",
               
"                "
              
);

//Pixmaps erzeugen..
$icon = &new gui_pixmap($xpm_d$gui);
$icon2 $icon->fetch_clone(); //Hier wird der fehler erzeugt, der in der Funktion fetsch_clone() seinen uhrsprung hat..

class gui_pixmap extends GtkPixmap
{
  var 
$_class_name 'gui_pixmap';
  var 
$main_window;
  var 
$xpm_d;

  function 
gui_pixmap($xpm_d, &$main_window)
  {
    if( !
is_object($main_window) )
    {
      return 
FALSE;
    }
    
//Transparente farbe definieren..
    
$transparence = new GdkColor(000);
    
//Fensterverweis festlegen..
    
if( isset($main_window->window->window) )
    {
      
$window $main_window->window->window;
    }
    elseif( isset(
$main_window->window) )
    {
      
$window $main_window->window;
    }
    else
    {
      return 
FALSE;
    }
    
//Überprüfen ob xpm_d gültig ist..
    
if( !is_array($xpm_d) )
    {
      return 
FALSE;
    }
    
//GdkPixmap erzeugen,,
    
list($pixmap$mask) = gdk::pixmap_create_from_xpm_d($window$transparence$xpm_d);
    
//Erzeugen und Zurückgeben einer GtkPixmap..
    
$this->GtkPixmap($pixmap$mask);
    
    
//Daten für clones speichern..
    
$this->main_window $main_window;
    
$this->xpm_d $xpm_d;
  }
  
  function 
fetch_clone()
  {
    
$pixmap = &new gui_pixmap($this->xpm_d$this->main_window); //Das ist die vermeindliche fehlerquelle..
    
return $pixmap;
  }

Wenn ihr mir sagen könnt, wie ich es schaffen kann, so einen Klon zurückzugeben, oder gar eine Andere idee, das ganze zu Kopieren ohne die Selbe resource in GTK zu haben, sagt bitte bescheit!
Danke, gruss Florian

PS: Es liegt nicht an dem `&´-zeichen, ohne dieses kommt die gleiche fehlermeldung..
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 26.11.2004, 19:54  
Gast
 
Beiträge: n/a
Standard

es ist zwar eine leicht absurde idee, aber schonmal versucht die werte in locale variablen zu schreiben, an die referenz übergeben und danach wieder in die objectvariable schreiben.
  Mit Zitat antworten
Alt 26.11.2004, 20:10  
Gast
 
Beiträge: n/a
Standard

Wie meinst du das genauer?
Vorallem "An die Referenz übergeben"..
Oder meinst du als referenz?
  Mit Zitat antworten
Alt 26.11.2004, 21:29  
Gast
 
Beiträge: n/a
Standard

ja mein ich sorry...

aber war wohl ein falscher gedanke.

doch ich muss sagen, ich habe so auch schon gearbeited und bei mir gab es keine probleme...vielleicht alte php version wer weis aber ich weis im moment auch nicht...
  Mit Zitat antworten
Alt 27.11.2004, 12:58  
Gast
 
Beiträge: n/a
Standard

Hmm..
es ist version 4.3.9, also nicht besonderst alt..
Für PHP5 gibt es die Erweiterung ja leider nicht..
Wenn ich andere Objekte, also nicht das eigene erstelle geht es übrigens..
*argh
  Mit Zitat antworten
Alt 27.11.2004, 15:14  
Gast
 
Beiträge: n/a
Standard

ok mal anders gesehen:

du erstellst ja nur eine referenz von dir selber, was das bringt sei da hin gestellt.

nun, du könntest doch einfach den constructor alleine aufrufen und dann $this zurück geben, würde doch auf's selbe heraus kommen?

aber ich hab das gefühl da ist auch irgend ein denkfehler meinerseits drinne
  Mit Zitat antworten
Alt 28.11.2004, 21:13  
Gast
 
Beiträge: n/a
Standard

Hi!
$this ist ja schon ein objekt und nicht nur der Konstruktor.
Das problem ist das ich nicht einfach das ganze ding kopieren kann, sondern neu instanzieren muss, weil GtkPixmap jedesmal eine eindeutige ID vergibt, und die gibt es ansonsten 2 mal, was zu problemen führt..
  Mit Zitat antworten
Alt 28.11.2004, 21:36  
Gast
 
Beiträge: n/a
Standard

nein nein ich mein das anders...

du erstellst ja nur die referenz...also würde es doch theoretisch gehen:

$this->gui_pixmap($this->xpm_d, $this->main_window);
return $this;


ich hab nämlich immernoch nicht verstanden warum du eine referez der eigenen classe erstellen willst...
  Mit Zitat antworten
Alt 29.11.2004, 16:02  
Gast
 
Beiträge: n/a
Standard

Ich nehm an es liegt daran dass der 2. Parameter des Konstruktors ($main_window) als Referenz deklariert ist, PHP kann vielleicht aus irgend nem Grund keine Referenz auf ne Membervariable ausserhalb des Objekts erzeugen. Muss das unbedingt ne Referenz sein? Wenn ja gehts vielleicht so:

$foo=$this->main_window
$this->gui_pixmap($this->xpm_d, $foo);

Ist halt dann in dem Spezialfall des Klonens keine Referenz, aber vielleicht gehts so ohne Fehlermeldung.

Wolfgang
http://www.zackbagga.com
  Mit Zitat antworten
Alt 29.11.2004, 16:03  
Gast
 
Beiträge: n/a
Standard

Äh ich mein natürlich:

$foo = $this->main_window;
$pixmap = &new gui_pixmap($this->xpm_d, $foo);
  Mit Zitat antworten
Antwort


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
[Erledigt] Instanz einer Klasse mit unbekanntem Namen erstellen PHP Tipps 2005 4 06.02.2009 14:39
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
mehrdimensionales Array in Klasse erstellen Nixwisser PHP Tipps 2007 2 01.08.2007 14:30
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
mehr als eine Klasse einbinden Alpha Centauri PHP-Fortgeschrittene 4 13.04.2006 20:56
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
Klasse ändern UniQ PHP Tipps 2004 5 24.08.2004 14:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
referenzfehler, klon erstellen deutsch 3.klasse, \window hat keinen konstruktor\, clone erstellen de, was sind referenzfehler, referenzfehler: window hat keinen konstruktor, php referenz klonen, referenze fehler, klassenintern

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:59 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.