Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Klasseninstanzen in PHP (https://www.delphipraxis.net/70706-%5Bphp%5D-klasseninstanzen-php.html)

3_of_8 3. Jun 2006 01:34


[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:
global $objects;

class MyClass {

  public $title;

  function MyClass($title) {
    $this->title=$title;
    $GLOBALS["objects"][$title]=&$this;
  }

}
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.

titus 3. Jun 2006 01:47

Re: [PHP] Klasseninstanzen in PHP
 
Was bitte willst du denn da machen? Ich versteh denn Sinn davon nicht ganz :gruebel: :-D

mfG, titus

Mystic 3. Jun 2006 01:52

Re: [PHP] Klasseninstanzen in PHP
 
Sollte der Konstruktor nicht __construct($title) heissen?

titus 3. Jun 2006 01:58

Re: [PHP] Klasseninstanzen in PHP
 
Naja in PHP5 aber in PHP4 ging es noch so:

new MyClass(...);

mfG, titus

3_of_8 3. Jun 2006 09:53

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.

Frickeldrecktuxer_TM 3. Jun 2006 10:26

Re: [PHP] Klasseninstanzen in PHP
 
Zitat:

Zitat von 3_of_8
Die =& Anweisung hat überhaupt keinen Effekt. Wenn ich statt =& schreibe = funktioniert es zwar scheinbar, aber ich habe ein Kopie und keine Referenz.

Welchen Wert hat denn $objects[$title] danach? Vielleicht bringt die Lektüre des Handbuchs (und zwar weiter als nur das erste Code-Beispiel) ein wenig Erleuchtung.

7eddi 3. Jun 2006 10:30

Re: [PHP] Klasseninstanzen in PHP
 
Also bei mir funktioniert beides, mit und ohne Referenzierung mit &.

Code:
<?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;

?>
Beidesmal spuckt mir das Script:

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:.

7eddi 3. Jun 2006 11:24

Re: [PHP] Klasseninstanzen in PHP
 
Das Handbuch hilft schonmal weiter :-), zumindest wenn man auch den letzten Kommentar von aib liest.

Zitat:

Note that the "new" operator no longer returns a copy of the constructed object, but the object itself. This behavior may be as of PHP 5.x.

This means that
$foo = new class();
and
$foo =& new class();
are equivalent now, and you don't have to worry about the problems stated on this page.

3_of_8 3. Jun 2006 11:57

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.

alcaeus 3. Jun 2006 12:37

Re: [PHP] Klasseninstanzen in PHP
 
Ja, und?

Code:
$a = new a();
$objects[] = &$a;
Happy? Ich glaub dass du mit dem $this-Operator nicht so einfach & verwenden kannst.

Greetz
alcaeus

PS: Es ist = &$a, und nicht =& $a. Das & gehoert zu $a, und nicht zum =.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:10 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz