2009-10-13 8 views
9

Les gars de foin. Je suis un peu nouveau sur OOP en PHP. J'ai appris à écrire et créer des objets. Existe-t-il un moyen de prendre un objet et de le passer à un autre script? soit en utilisant GET ou POST ou SESSION ou autre. S'il n'y a pas comment attribuer un objet à certaines variables sur une page, puis affecter le même objet plus de variables sur une autre page?déplacer un objet d'une page à l'autre?

Merci

Répondre

14

Vous pouvez stocker des objets dans la session mais vous devez inclure le fichier contenant la définition de classe avant d'appeler session_start() (ou utiliser class autoloading et le configurer avant de démarrer la session). Par exemple:

Sur chaque page:

//include class definition 
require('class.php'); 

//start session 
session_start(); 

1ère page:

$object = new class(); 
$object->someProperty = 'hello'; 

//store in session 
$_SESSION['object'] = $object; 

pages suivantes:

$object = $_SESSION['object']; 

//add something else, which will be stored in the session 
$object->anotherPropery = 'Something'; 
+0

Merci! Parfait exemple. De plus, je ne connaissais pas la méthode __autoload. – dotty

1

Vous pouvez utiliser le _SESSION $. mais ce ne sera que pour cette session.

2

Vous pouvez stocker l'objet dans une SESSION. Vous pouvez sérialiser l'objet et passer par GET ou POST.

Si vous souhaitez que l'objet persiste sur le site, SESSION est probablement votre meilleur pari.

+0

Merci, il semble que les SESSIONs soient le meilleur pari – dotty

1

Utilisation d'un object sur plusieurs 'scripts':

D'abord, vous devez décider du type de structure de votre application POO. Si vous utilisez quelque chose comme MVC pattern, vous n'avez pas cela en utilisant SESSION ou REQUEST, parce que vous pouvez 'brancher' les objets que vous voulez utiliser dans 'one'. Qu'est-ce que cela signifie?

Un exemple rapide:

  1. utilisateur A entre votre site index.php
  2. Maintenant, vous pouvez charger le contenu d'un index.html statique, mais si vous voulez vérifier si l'utilisateur est authentifié pour voir des contenus spécifiques le 'Admin Login', vous pouvez utiliser include_once('Authentication.php') et lancer une classe à partir de ce fichier, par ex. <?php $Auth = new Auth_Handler; ?> Cela rendra la classe Auth également disponible dans index.php ou tout autre fichier que vous souhaitez inclure dans cette classe. Si vous souhaitez transmettre la valeur de retour de la classe d'authentification à un autre fichier, par exemple, 'register.php' vous pouvez utiliser la SESSION ou tout autre Cache. Le passage d'objets entiers n'est pas recommandé en raison de leur taille. Inclure et initier les classes voulues au début des fichiers est beaucoup mieux. Et en passant les retours par SESSION utilise moins d'espace.

Cela dépend vraiment du framework ou de l'API que vous voulez utiliser, ou du projet que vous voulez créer.

3

Voici un exemple avec autoloading en ce qui concerne la réponse de Tom Haigh:

Avant de commencer la session:

function __autoload($className) { 
    $file = PATH_TO_FOLDER_WITH_ALL_CLASS_FILES."/".$className.'.php'; 
    if(file_exists($file)) { 
     require_once $file; 
    } 
} 

session_start(); 

page passer l'objet:

$object = new class(); 
$object->someProperty = 'hello'; 

//store in session 
$_SESSION['object'] = $object; 

page réception l'objet:

$object = $_SESSION['object']; 

//add something else, which will be stored in the session 
$object->anotherPropery = 'Something'; 

La méthode de chargement automatique charge automatiquement les objets lorsque vous récupérez des données de la session.