gpt4 book ai didi

php - 我的对象包含自身的多个实例,我应该担心吗?

转载 作者:可可西里 更新时间:2023-10-31 22:45:33 24 4
gpt4 key购买 nike

我有两个类,QuizQuestion:

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();
}

如果我只想显示一个问题(以及所有个性信息),我可以使用以下代码:

$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();

我担心我的每个问题对象都需要来自测验对象的信息才能运行

当我将所有问题对象加载到我的测验中时(使用 $quiz_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

注意将关系数量保持在应用程序运行所需的最低限度。

关于php - 我的对象包含自身的多个实例,我应该担心吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12640027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com