php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.10.2005, 21:25  
Gast
 
Beiträge: n/a
Standard Objekte

Hallo!

Ein Beispiel:

Ich erzeuge ein Objekt "mySession"* ganz zu Beginn des Programmlaufs.
Anschließend werden weitere Objekte erzeugte, teilweise auf Klassen die
in anderen Dateien liegen, und in einem dieser möchte
ich auf Session-Variablen zugreifen. "mySession" bekomme ich nicht mehr.

*Dahinter verbirgt sich im betroffenen Konstruktur ein normales session_start().

Meine Fragen:
Wie kann ich das Objekt weitergeben bzw. was muss ich beachten?
bzw.
Wenn ich erneut so ein Objekt "mySession" erzeuge, komme ich dann zwar
auch an meine Session-Variablen bzw. - Werte ran, aber er meldet auch:
Notice: A session had already been started - ignoring session_start()
 
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 04.10.2005, 21:59  
Gast
 
Beiträge: n/a
Standard zur Veranschaulichung

in der index.php:
require_once(Session.class.php);
require_once(Main.class.php);


$mySession=Session()

dann erst das erste Objekt:
new Main($abc);

In der Main wird, je nach $abc, ein weiteres Objekt erzeugt
und erst in diesem benötige ich Werte aus der Session.
Kann ich hier dann noch $mySession nutzen?

DANKE!
 
Alt 04.10.2005, 22:34  
Gast
 
Beiträge: n/a
Standard

Vermutlich ja.
Es gibt zwar das Thema Geltungsbereich bei php. Das bezieht sich aber nicht auf Dateigrenzen - die sind php egal.

Weitere Erklärung: http://www.php.net/manual/de/languag...bles.scope.php
 
Alt 04.10.2005, 22:48  
Gast
 
Beiträge: n/a
Standard

Danke.

Wie ich zwischenzeitlich herausbekommen habe, kann ich das Objekt auch
ganz klassisch übergeben - z.B. dem Konstruktor der Klasse, in dem ich es
zukünftig verwenden will.

Ein Beispiel aus Deinem Verweis:
<?php
function test_global_ref() {
global $obj;
$obj = &new stdclass;
}

function test_global_noref() {
global $obj;
$obj = new stdclass;
}

test_global_ref();
var_dump($obj);
test_global_noref();
var_dump($obj);
?>

Ausgabe:
NULL
object(stdClass)(0) {
}

hört sich sehr gut an, nur leider scheint es ja nicht richtig zu klappen?
Aber ein globales Objekt für mein $mySession wäre toll.

Gibt es vielleicht eine Variante, dass das doch klappt?
 
Alt 04.10.2005, 22:54  
Gast
 
Beiträge: n/a
Standard

Bin mir nicht sicher, ob wir aneinander vorbeireden.

Das geht:
PHP-Code:
<?php
require 'DateiA.php';
require 
'DateiB.php';
require 
'DateiC.php';
?>
PHP-Code:
<?php // DateiA.php
class foo {
    function 
bar()     {
        echo 
'bar:'time();
    }
}
?>
PHP-Code:
<?php // DateiB.php
$foo = new foo;
?>
PHP-Code:
<?php //DateiC.php
$foo->bar();
?>
Was ist an Deinem Fall anders?
 
Alt 05.10.2005, 18:52  
Gast
 
Beiträge: n/a
Standard

Eigentlich sieht es meiner Konstellation sehr ähnlich.

in DateiB und - damit geht es los! - erzeuge ich ein Objekt,
dessen Klassendef. z.B. in DateiA, (z.B. $foo) steht.
Konkret: $mySession=new Session();

Dann erzeuge ich ein Objekt,
dessen Klassendef. z.B. in DateiB steht
und will in einer private function(), dieser Klasse, das
1. Objekt (z.B. $foo) mit einer Funktionaufrufen
Konkret: $this->mySession->get('VarName');

Und da will er immer eine neue Session öffnen!

Hätte ich es nur über $mySession ansprechen müssen?


Mittlerweile übergebe ich das Objekt ($mySession) immer an
das neue Objekt bzw. dessen Konstruktor und darin
heisst es dann: $this->mySession=$uebergebenesSessionObjekt;
 
Alt 05.10.2005, 19:41  
Gast
 
Beiträge: n/a
Standard

Zitat:
Mittlerweile übergebe ich das Objekt ($mySession) immer an
das neue Objekt bzw. dessen Konstruktor und darin
heisst es dann: $this->mySession=$uebergebenesSessionObjekt;
Das ist der jetztige Zustannd auf den immer noch
Zitat:
Und da will er immer eine neue Session öffnen!
zutrifft?

Wenn möglich, den Code soweit vereinfachen, dass Du ihn hier posten kannst und der Fehler trotzdem noch in der Form auftritt. Sonst wird das hier wieder Hellsehen für Fortgeschrittene.
 
Alt 08.10.2005, 23:41  
Gast
 
Beiträge: n/a
Standard

Hier noch eine kleine Verdeutlichung meiner Konstruktion.
Das Problem ist, er erkennt mein einmal erstelltes Objekt $mySession
nicht mehr. Liegt es daran, dass die Erzeugung in der allerersten
Datei passiert, die ja noch nicht mit Class eingeleitet wird, da ich
ja nicht direkt OOP losprogrammieren kann?

File a.php, wird zuerst aufgerufen)
--Anfang
require_once(ROOT.'session.php');
require_once(ROOT.'main.php');

$mySession=new Session();

session.php beinhaltet:
class Session {
public function __construct() {
// Startet Session
session_start();
}
}

dann:
new main in b ();
--Ende von a.php

main.php beinhaltet:
class Main {
public function __construct() {
...this-> function xyz();
}

public function xyz() {
$mySession->...();
// Das funktioniert dann nicht mehr
// er kennt das Objekt nicht mehr !!!
}
}
 
Alt 08.10.2005, 23:46  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

nun, $mySession ist ja auch keine superglobale. Du vergisst, dass in funktionen die anderen variablen nicht gelten. Du musst vorher

global $mySession;

schreiben (also in der funktionen xyz ganz am anfang)
Buhmann ist offline  
Alt 09.10.2005, 01:56  
Gast
 
Beiträge: n/a
Standard

Stimme Buhmann zu. Damit beschäftigt sich http://www.php.net/manual/de/languag...bles.scope.php und dann unterscheiden sich mein Beispiel und Deine Situation eben um den Umstannd, dass der Aufruf aus einer Funktion heraus stattfindet.

Verstehe aber diesen Satz nicht:
Zitat:
Liegt es daran, dass die Erzeugung in der allerersten Datei passiert, die ja noch nicht mit Class eingeleitet wird, da ich
ja nicht direkt OOP losprogrammieren kann?
Wie meinen?
 
 


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] Referenzen auf Objekte innerhalb eines Arrays PHP-Fortgeschrittene 6 31.08.2009 17:06
[Erledigt] objekte mit bilddaten serialisieren lumo PHP Tipps 2008 1 17.07.2008 12:25
[Erledigt] Objekte übergeben Felix PHP Tipps 2008 23 18.06.2008 12:21
Sortierbare Objekte Zergling-new PHP-Fortgeschrittene 5 27.11.2007 23:19
Objekte zur Laufzeit Vererbung anhängen Zergling-new PHP-Fortgeschrittene 8 17.11.2007 17:31
2 AJAX Objekte GSJLink HTML, Usability und Barrierefreiheit 6 15.08.2007 16:05
Objekte moose PHP Tipps 2006 13 29.07.2006 16:18
Rekursives durchlaufen meiner Objekte GELight PHP Tipps 2006 2 01.07.2006 23:21
Objekte sortieren Fatal Error PHP Tipps 2006 4 13.04.2006 14:24
[Erledigt] Objekte vergleichen PHP-Fortgeschrittene 4 08.12.2005 16:20
objekte und klassen notyyy PHP Tipps 2005-2 2 24.10.2005 17:44
[Erledigt] Verständnisfrage OOP - Objekte in MySQL Datenbank schreiben? PHP Tipps 2005 2 19.05.2005 21:40
Ganze Objekte an Script weitergeben dreamingof8a PHP Tipps 2004-2 6 23.11.2004 12:17
[Erledigt] Referenzen auf Objekte PHP-Fortgeschrittene 2 17.08.2004 11:08
Anonyme Objekte? PHP-Fortgeschrittene 18 25.07.2004 22:19

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
\anonyme objekte\ mit php ansprechen, object(stdclass) erklärung

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