Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

POO PHP - duree de vie d'un objet

8 réponses
Avatar
Shamil
imaginons, j'ai un index.php du genre

<?php
include ("php/content.php");
$doc=new content ($_REQUEST["mode"]);
$doc->echoDocument();
?>

une foi method doc->echoDocument() est executee - l'objet n'existe plus?

A la prochaine invocation par le meme client, le nouveau objet doc sera cree?

8 réponses

Avatar
ho alexandre
Shamil wrote:

imaginons, j'ai un index.php du genre

<?php include ("php/content.php"); $doc=new content
($_REQUEST["mode"]); $doc->echoDocument(); ?>

une foi method doc->echoDocument() est executee - l'objet n'existe
plus?


ça dépend si les register_global sont activées.
En général si tu veux qu'un objet soit persistant, il vaut mieux le
mettre dans une des méta-variables.
En faisant par exemple :


<?php
include_once('php/content.php');

if (isset($_SESSION['doc'])) {
$doc = $_SESSION['doc'];
} else {
$doc = new content(..);
$_SESSION['doc'] = $doc;
} // END

$doc->echoDocument();
?>



A la prochaine invocation par le meme client, le nouveau objet doc
sera cree?


non, une autre instance de l'objet.



--
XandreX
/I'm that kind of people your parents warned you about/

Avatar
Chuky
Shamil wrote:

imaginons, j'ai un index.php du genre

<?php
include ("php/content.php");
$doc=new content ($_REQUEST["mode"]);
$doc->echoDocument();
?>

une foi method doc->echoDocument() est executee - l'objet n'existe plus?
Si, ton objet existe toujours, tant qu'il n'est pas détruit ou écrasé (

print_r($doc); )


A la prochaine invocation par le meme client, le nouveau objet doc sera cree?
Oui, à chaque "New", une nouvelle instance de l'objet est crée.


--
Chuky

Avatar
Kupee
ho alexandre wrote:
ça dépend si les register_global sont activées.
En général si tu veux qu'un objet soit persistant, il vaut mieux le
mettre dans une des méta-variables.
En faisant par exemple :


<?php
include_once('php/content.php');

if (isset($_SESSION['doc'])) {
$doc = $_SESSION['doc'];
} else {
$doc = new content(..);
$_SESSION['doc'] = $doc;
} // END

$doc->echoDocument();
?>


Encore que les objets en session c'est assez bof, très chiant sur
l'ordre des include et des session_start() ...
Dans la plupart des cas j'aime mieux réinstantier ...

Avatar
Cornelius
"Kupee" a écrit dans le message de news:
3f375671$0$26387$
Encore que les objets en session c'est assez bof, très chiant sur
l'ordre des include et des session_start() ...
Dans la plupart des cas j'aime mieux réinstantier ...


Mais là on perd le but: garder des infos (cas d'objet UTILISATEUR ou PANIER)

Avatar
yvon.thoravallist
Shamil wrote:


une foi method doc->echoDocument() est executee - l'objet n'existe plus?

A la prochaine invocation par le meme client, le nouveau objet doc sera cree?
(j'avoue ne pas avoir très bien compris la question mais je répond qd

même ...)
oui, sauf si tu sérialises :

première utilisation :
------------------------------------------------------------------------
include("../class/class_site.php");
$site=new site();

if(isset($HTTP_SERVER_VARS["REMOTE_USER"])){$site->user=$HTTP_SERVER_VAR
S["REMOTE_USER"];}
$title="Mon_bô_titre";
[...]
$site->majDate{'short'}."n";
$_SESSION['site']=serialize($site);
------------------------------------------------------------------------
nième utilisation :
include("../class/class_site.php");
$site=unserialize($_SESSION['site']);

if(isset($_GET['numFile'])){$site->numFile=$_GET['numFile'];$numFile=$si
te->numFile;}
$title="Mon_bô_titre";
[...]
$_SESSION['site']=serialize($site);
------------------------------------------------------------------------
supposons une page où tu ne te serts pas de $site, dans ce cas la doc
dit qu'il est préférable d'inclure qd même la classe :
include("../class/class_site.php");
sinon l'objet $site peut être détérioré à la page suivante où tu en as
besoin.

--
Yvon

Avatar
Cornelius
"Yvon Thoraval" a écrit dans
le message de news:
1fzjfm9.cl0lnk15wt382N%

if(isset($HTTP_SERVER_VARS["REMOTE_USER"])){$site->user=$HTTP_SERVER_VAR
S["REMOTE_USER"];}
$title="Mon_bô_titre";
[...]
$site->majDate{'short'}."n";
$_SESSION['site']=serialize($site);
------------------------------------------------------------------------
nième utilisation :
include("../class/class_site.php");
$site=unserialize($_SESSION['site']);

if(isset($_GET['numFile'])){$site->numFile=$_GET['numFile'];$numFile=$si
te->numFile;}
$title="Mon_bô_titre";
[...]
$_SESSION['site']=serialize($site);
------------------------------------------------------------------------


Pourquoi sérialiser ?
Moi ej n'ai pas besoin de la faire pour trimbaler mes objets par le session
en cours...

Avatar
yvon.thoravallist
Cornelius wrote:

Pourquoi sérialiser ?
Moi ej n'ai pas besoin de la faire pour trimbaler mes objets par le session
en cours...


Effectivement, la sérialisation n'est utile que dans les cas où l'on
souhaite préserver l'état de l'objet d'une page à l'autre.
--
Yvon

Avatar
Marc
Non plus: je récupère mes objets d'une page à l'autre via ma session, sans
les sérialiser.
Utile si on tuilise pas de sessions


ou encore pour debugger, et extraire un environnement d'un contexte un
peu compliqué, et travaillé dessus, dans un environnement simplifié.

Genre je prend une grosse structure longue a générée (acces serveur)
et apres j'effectue des manipulations sur cette structure.

Il suffit de faire un

$struct = unserialize($data);