2009-10-13 25 views
9

ヘイ男。私はPHPでOOPを少し新しくしました。私はオブジェクトを作成して作成する方法を学びました。オブジェクトを取得して別のスクリプトに渡す方法はありますか? GETまたはPOSTまたはSESSIONなどのいずれかを使用します。 1つのページにオブジェクトにいくつかの変数を割り当てる方法がない場合は、同じオブジェクトに別のページの変数を割り当てますか?オブジェクトを1ページから別のページに移動しますか?

ありがとうございます。

答えて

14

セッションにオブジェクトを格納できますが、session_start()を呼び出す前にクラス定義を含むファイルをインクルードする必要があります(またはセッションを開始する前にclass autoloadingを使用してください)。たとえば、次のすべてのページに

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

//start session 
session_start(); 

1ページ目:

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

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

後続のページ:

$object = $_SESSION['object']; 

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

ありがとう!完璧な例。また、私は__autoloadメソッドについて知らなかった。 – dotty

1

$ _SESSIONを使用できます。そのセッションのためだけになるでしょう。

2

オブジェクトをSESSIONに格納できます。 オブジェクトをシリアル化し、GETまたはPOSTを通過できます。

オブジェクトをサイト全体に保持したい場合は、おそらくSESSIONが最適です。

+0

ありがとうございます、セッションのようなものがベストベットです – dotty

1

objectを複数の 'スクリプト'に使用する:

まず、OOPアプリケーションにどのような構造があるかを判断する必要があります。 MVC patternのようなものを使用する場合は、「1」に使用するオブジェクトを「プラグイン」できるため、セッションまたは要求を使用してこれを行う必要はありません。 これはどういう意味ですか?

簡単な例:

  1. ユーザーAが
  2. はindex.phpあなたのサイトに入った今、あなたは、静的index.htmlを、 からコンテンツを読み込むことができますが、ユーザーが認証されているかどうかを確認する場合具体的な内容を見る「管理者ログイン」の場合、include_once('Authentication.php')を使用して、このファイルからクラスを開始できます。 <?php $Auth = new Auth_Handler; ?> Authクラスは、このクラスを含めるindex.phpやその他のファイルでも使用できます。 認証クラスの戻り値を別のファイルに渡す場合は、 'register.php'あなたはSESSIONやその他のキャッシュを使うことができます。 全体のオブジェクトを渡すことは、そのサイズのために推奨されません。 ファイルの先頭に必要なクラスをインクルードして開始する方がはるかに優れています。 そして、SESSIONによる戻り値の受け渡しは、より少ないスペースを使用します。

実際には、使用するフレームワークやAPI、作成するプロジェクトに依存します。あなたがセッションを開始する前に

:ここ

3

はトム・ヘーグによって答えに関してで自動ロードを持つ例であるオブジェクトを渡す

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

session_start(); 

ページ:

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

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

ページの受信オブジェクト:

$object = $_SESSION['object']; 

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

セッションからデータを取得している間、autoloadメソッドは自動的にオブジェクトをロードします。