私は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 は、オブジェクトへの単に「参照」として渡すインスタンスを処理しますか?