#php #arrays #class #function #object
#php #массивы #класс #функция #объект
Вопрос:
Я не могу понять, почему программа не работает. Я должен взять каждый объект student и использовать для функции assign_to_dorm и добавить их в общежитие. а затем распечатайте все объекты в массиве с помощью функции view_occupants . Все, что делает программа, это повторяет одно из имен общежития и ничего не делает с view_occupants . Я даже не уверен, работает ли функция Assign_to_dorm
index.php файл
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
require_once ('student.class.php');
require_once ('dorm.class.php');
$dorms = array();
$students = array();
$dorms[0]= new Dorm('Landis', 402);
$dorms[1]= new Dorm('Salley', 570);
$dorms[2]= new Dorm('DeGraff', 700);
$dorms[3]= new Dorm('Cawthon', 297);
$dorms[4]= new Dorm('Reynolds', 243);
$students[0] = new Student('Tim', 'James', 'senior', 'male');
$students[1] = new Student('Kyle', 'McLastly', 'junior', 'male');
$students[2] = new Student('Stacey', 'Keibler','senior','female');
$students[3] = new Student('Jessica', 'Mullins', 'junior','female');
$students[4] = new Student('Kenneth', 'Yagems','senior', 'male');
$students[5] = new Student('Chad', 'Stacey', 'sophomore', 'male');
$students[6] = new Student('Kyle', 'Bridgan', 'senior', 'male');
$students[7] = new Student('Heath', 'Banks', 'sophomore', 'female');
$students[8] = new Student('Christina', 'Burbanks', 'freshman', 'female');
$students[9] = new Student('Thomas', 'Wilson', 'senior', 'male');
$students[10] = new Student('Katy', 'Parks', 'junior', 'female');
$students[11] = new Student('Jay', 'Bradshaw', 'sophomore', 'male');
$students[12] = new Student('Laura', 'Demetri', 'freshman', 'female');
$students[13] = new Student('Bryan', 'Griffin', 'freshman', 'male');
$students[14] = new Student('Stuart', 'Griffin', 'senior', 'male');
shuffle($students);
foreach($students as $student){
$key = array_rand($dorms);
$dorm = $dorms[$key];
$dorm->assign_to_dorm($student);
}
foreach ($dorms as $dorm){
echo "<h3>".$dorm->get_dname()."</h3>";
echo "<p>".$dorm->view_occupants()."</p>";
}
?>
</body>
</html>
dorm.class.php файл
<?php
require_once ('student.class.php');
class Dorm
{
private $dorm_name;
private $capacity;
private $occupants = array();
public function __construct($dorm_name,$capacity) {
$this->dorm_name = $dorm_name;
$this->capacity = $capacity;
}
public function assign_to_dorm($student){
if(count($this->occupants) >= $this->capacity) {
return FAlSE;
}
else{
array_push($this->occupants, $student);
return TRUE;
}
}
function get_dname(){
return $this->dorm_name;
}
function get_capacity(){
return $this->capacity;
}
function view_occupants(){
foreach($this->occupants as $resident){
echo "<p>".$resident."</p>";
}
}
}
?>
Ответ №1:
Ваш код выглядит нормально для меня, но я замечаю, что Dorm::ocupants
он выглядит как массив Student
объектов. Когда вы выполняете итерацию по нему view_occupants()
, вы повторяете объект напрямую. Если он __toString()
не вызывает волшебный метод для вывода echo
, вы не будете отображать информацию, которую вы намереваетесь.
Если мое предположение неверно, пожалуйста, также опубликуйте student.class.php
.
function view_occupants(){
foreach($this->occupants as $resident){
// Instead of echoing out the $resident obj, echo out a name:
echo "<p>".$resident->lastname."</p>";
}
}
Комментарии:
1. большое вам спасибо. я провел последние 7 часов сегодня и 5 часов прошлой ночью, глядя на этот код, но затем вы заметили глупую ошибку через секунду. я действительно ценю это!!. это сработало отлично
Ответ №2:
Кажется, я не могу обнаружить никаких ошибок в вашем коде. За исключением этого, вы повторяете $resident, который является объектом, поэтому вам нужно повторить одно из его свойств, таких как name .
Попробуйте, если это не сработает, опубликуйте код и для класса Students, чтобы я мог попробовать его запустить.
Комментарии:
1. да. это была точная ошибка. я только что добавил $resident-> get_name(), и он работал безупречно.