![]() |
[PHP] Klasseninstanzen in PHP
Morgen. Ich erzeuge mir eine Klasse, und will im Konstruktor eine Referenz auf die Instanz in ein globales Array speichern, in etwa so:
Code:
Das wäre jetzt meine Idee gewesen. Funktioniert aber nicht. Die =& Anweisung hat überhaupt keinen Effekt. Wenn ich statt =& schreibe = funktioniert es zwar scheinbar, aber ich habe ein Kopie und keine Referenz.
global $objects;
class MyClass { public $title; function MyClass($title) { $this->title=$title; $GLOBALS["objects"][$title]=&$this; } } |
Re: [PHP] Klasseninstanzen in PHP
Was bitte willst du denn da machen? Ich versteh denn Sinn davon nicht ganz :gruebel: :-D
mfG, titus |
Re: [PHP] Klasseninstanzen in PHP
Sollte der Konstruktor nicht __construct($title) heissen?
|
Re: [PHP] Klasseninstanzen in PHP
Naja in PHP5 aber in PHP4 ging es noch so:
new MyClass(...); mfG, titus |
Re: [PHP] Klasseninstanzen in PHP
Also der Konstruktor wird zumindest aufgerufen. Soweit scheints noch zu passen.
Ich will einfach, dass bei der Instantiierung der Klasse ein Pointer auf die Instanz in ein globales Array gespeichert wird. Der Grund ist, dass ich die Instanzen der Klasse verwalten will. |
Re: [PHP] Klasseninstanzen in PHP
Zitat:
![]() |
Re: [PHP] Klasseninstanzen in PHP
Also bei mir funktioniert beides, mit und ohne Referenzierung mit &.
Code:
Beidesmal spuckt mir das Script:
<?php
header('Content-type: text/plain'); $objects = array(); class MyClass { public $title; function MyClass($title) { $this->title = $title; $GLOBALS['objects'][$title] = $this; # bzw. &$this } } $myobj = new MyClass('A'); # Objekt verändern $objects['A']->title = 'B'; # Objekt-Eigenschaften ausgeben echo $myobj.': '.$myobj->title."\r\n"; echo $objects['A'].': '.$objects['A']->title; ?> Object id #1: B Object id #1: B aus. Mich würde aber trotzdem mal interessieren, was bei der Zuweisung von $this nun eigentlich passiert. In Delphi hätte ich jetzt gesagt: Ist doch klar, $this ist ja schon ein Zeiger auf das Objekt, deswegen braucht man das auch nicht zu referenzieren... In PHP bin ich mir grad nicht so sicher :gruebel:. |
Re: [PHP] Klasseninstanzen in PHP
Das Handbuch hilft schonmal weiter :-), zumindest wenn man auch den letzten Kommentar von aib liest.
Zitat:
|
Re: [PHP] Klasseninstanzen in PHP
Ja, und? Mein Problem bleibt trotzdem bestehen. Mein Code sieht ja in etwa so aus:
$a = new a(); Jetzt will ich, dass im Konstruktor eine Referenz auf das erzeugte Objekt in das Array gespeichert wird. |
Re: [PHP] Klasseninstanzen in PHP
Ja, und?
Code:
Happy? Ich glaub dass du mit dem $this-Operator nicht so einfach & verwenden kannst.
$a = new a();
$objects[] = &$a; Greetz alcaeus PS: Es ist = &$a, und nicht =& $a. Das & gehoert zu $a, und nicht zum =. |
Re: [PHP] Klasseninstanzen in PHP
Argh!
Verfluchtes SelfPHP. Das steht =& $var drin. Nie wieder glaube ich dem Viech. Ich hab jetzt den Fehler gefunden und, oben ging es nur um den Konstruktor, dass der eine Referenz zurückgibt und dass da = und = & gleich sind. Jetzt merke ich, dass das immer so ist. Auf jeden Fall funktioniert es jetzt endlich. Danke @all. |
Re: [PHP] Klasseninstanzen in PHP
Grmpf...
Ich versteh das einfach nicht: Folgender Testcode:
Code:
So, jetzt die Überraschung:
<?php
class a { var $s; function a() { global $objects; $objects["a"]= &$this; } } $a=new a(); $objects["a"]->s="asdf"; echo($objects["a"]->s."\n"); echo($a->s."\n"); ?> Lokal, xampp, PHP 5. Ausgabe: asdf asdf (wie erwartet) Online, Kilu, PHP 4. Ausgabe: asdf Das bedeutet für mich (verknüpft mit anderen, ähnlichen Tests): Die Klassenrefenzen werden in PHP4 nicht übernommen Zumindest nicht bei mir. Bitte testet das Script mal auf eurem Webspace. |
Re: [PHP] Klasseninstanzen in PHP
Hi, Version 4.4.2:
Zitat:
|
Re: [PHP] Klasseninstanzen in PHP
Das muss doch irgendwie möglich sein...
Got it. Das geht schon, nur in PHP 4 seltsamerweise nicht im Konstruktor. |
Re: [PHP] Klasseninstanzen in PHP
Hab grade auch den Grund gefunden:
![]() Vor allem der erste Kommentar (englisch) ist sehr aufschlussreich. Mein Problem besteht trotzdem. |
Re: [PHP] Klasseninstanzen in PHP
Hallo 3_of_8,
was spricht gegen...
Code:
Was soll das komische $objects?
<?php
class a { var $s; function a() { } } $a = new a(); $a->s = "asdf"; echo($a->s."\n"); ?> Verwirrte Grüsse Thorsten |
Re: [PHP] Klasseninstanzen in PHP
Das ist ja nur ein Beispiel. Ich muss nachher auf alle Klasseninstanzen von der Klasse zugreifen können, dazu speichere ich eine Referenz in $objects.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz