我有两门课,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;
}
}
}
}
如您所见,我需要让问题对象访问我的
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();
}
如果我只想显示一个问题(以及所有个性信息),我可以使用以下代码:
$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();
我担心我的每个问题对象都需要来自测验对象的信息才能正常工作。
当我将所有问题对象加载到我的测试中时(使用$quizz_object->loadquestions),我的测试对象本质上包含问题信息,以及每个测试问题的多次自身实例。
所以看起来有点像
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将我传递的实例作为对象的“引用”来处理?
最佳答案
即使您将同一个测试实例分配给多个变量,这绝对不是问题,但完全可以。
因为这里只有一个实例,每个变量都是访问一个实例的一种方式,所以在您的示例中,问题知道它们是哪个测试的一部分。
在你的设计中,问题需要知道它们属于哪个测验,这是你所需要的,所以它是普遍适用的。
这是一个标准的1:N关系:
1:n
quiz:questions
请注意,您的关系数量保持在您的申请工作所需的最低限度。