php – 我的对象包含多个自身实例,我应该关注吗?
作者:互联网
我有两个课程,测验和问题:
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和$personalityities.
如果我希望加载所有问题以及可能的个性结果,我将使用以下代码:
$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();
我担心我的每个Question对象都需要来自Quiz对象的信息才能运行.
当我将所有问题对象加载到我的测验中时(使用$quiz_object-> LoadQuestions),我的测验对象基本上包含问题信息以及测验每个问题的多次自身实例.
所以它看起来有点像
Quiz_object
{06003
}
所以我的测验对象在对象中多次重复.
我应该关心这个问题,还是PHP处理我传递的实例只是对象的“引用”?
解决方法:
即使您将相同的测验实例分配给多个变量,这根本不是问题,但可以完全没问题.
因为这里有一个实例,并且每个变量都是访问该实例的一种方式,所以在您的示例中,问题知道它们属于哪个测验.
在您的设计中,问题需要知道它们属于哪个测验,这是您需要的,因此它通常适用.
这是一个标准的1:n关系:
1:n
quiz:questions
请注意保持关系数量达到应用程序工作所需的最小数量.
标签:php,oop,object,multiple-instances 来源: https://codeday.me/bug/20190529/1181409.html