4

私は2つのクラスを持っていQuizますQuestion

class Quiz()
{

    public $quiz_id;
    public $quiz_name;

    // Arrays of objects
    public $questions;
    public $personalities;

    function __construct($quiz_id)
    {
        // Sets the basic data of the quiz
        $this->quiz_id = $quiz_id;
        $this->quiz_name = $quiz_name_from_db;
    }

    function LoadQuestions()
    {
        // Get question ids from database

        // Blank array to add questions to 
        $array_of_question_objects = array();

        foreach ($question_from_db AS $question_info)
        {

            // Create Question object, passing this Quiz object 
            $question_object = new Question($question_info["question_id"], $this);

            // Add the question to the array
            $array_of_question_objects += $question_object;

        }

        // Set the array within the Quiz object
        $this->questions = $array_of_question_objects;
    }

    function LoadPersonalities()
    {
        $this->personalities = $array_of_personalty_objects;
    }
}

class Question()
{

    public $question;

    // Quiz object within the question for access to personalities and quiz type
    private $quiz_object;

    function __construct($question_id, $quiz_object)
    {
        // Set the quiz object within the question
        $this->quiz_object;

        // Load the question information from the database and set the values of the class
        $this->question = $question_from_database;
    }


    function ShowQuestion()
    {
        // Show a question on the page and also
        // Loop through all of the personalities

        echo "<div id="question">";


        if ($quiz_object->quiz_type == "personality")
        {
            foreach ($quiz_object->personalities AS $quiz_personality)
            {

                // Show each personality
                echo $quiz_personality;
            }
        }
    }
}

ご覧のとおり、Question オブジェクトにQuizオブジェクト値へのアクセス権を与える必要があります:$quiz_type$personalities.

すべての質問と、考えられるパーソナリティの結果を読み込みたい場合は、次のコードを使用します。

$quiz_id = 1;

// Create a quiz object
$quiz_object = new Quiz($quiz_id);

// Load the questions in to the Quiz object
$quiz_object->LoadQuestions();

// Load all of the personalities
$quiz_object->LoadPersonalities();

// Show the questions
foreach ($quiz_object->questions AS $question)
{
    // Show the question
    $question->ShowQuestion();
}

1 つの質問 (およびすべての個人情報) を表示したい場合は、次のコードを使用できます。

$quiz_id = 1;
$question_id = 40;

// Create a quiz object
$quiz_object = new Quiz($quiz_id);

// Load all of the personalities for the quiz object
$quiz_object->LoadPersonalities();

// Load the question as an object
$question_object = new Question($question_id, $quiz_object);

// Show the HTML for the question
$question_object->ShowQuestion();

各 Question オブジェクトが機能するためには、Quiz オブジェクトからの情報が必要なのではないかと心配しています

すべての Question オブジェクトを Quiz にロードすると ($quiz_object->LoadQuestions を使用)、quiz オブジェクトには基本的に、クイズの各質問に対して複数回、質問情報とそれ自体のインスタンスが含まれます。

だからちょっと似てる

Quiz_object{

Question_object:
{
    question information
    instance of `Quiz_object`
}

Question_object:
{
    question information
    instance of `Quiz_object`
}

Question_object:
{
    question information
    instance of `Quiz_object`
}

Question_object:
{
    question information
    instance of `Quiz_object`
}

Question_object:
{
    question information
    instance of `Quiz_object`
}

}

したがって、私のQuizオブジェクトはオブジェクト内で複数回複製されます。

これについて心配する必要がありますか、それとも PHP は、オブジェクトへの単に「参照」として渡すインスタンスを処理しますか?

4

2 に答える 2

3

同じクイズインスタンスを複数の変数に割り当てたとしても、これはまったく問題ではないはずですが、完全に問題はありません。

ここには単一のインスタンスがあり、各変数はその1つのインスタンスにアクセスする方法であるため、ここでの例では、質問はそれらがどのクイズに含まれているかを知っています。

あなたのデザインのように、質問は彼らがどのクイズに属しているかを知る必要があります、これはあなたが必要とするものなので、それは一般的に適用可能です。

これは標準の1:n関係です。

   1:n

quiz:questions

アプリケーションが機能するために必要な最小限の関係の数を維持するように注意してください。

于 2012-09-28T14:06:04.740 に答える
2

バージョン 5 の PHP オブジェクトの受け渡しは参照によって行われるため、心配する必要はありません。

于 2012-09-28T12:30:06.857 に答える