Есть несколько классов, которые взаимодействуют между собой.
Класс School должен создавать объект, например, Школа №13, который содержит массив объектов класса SchoolClasses.
Экземпляры класса SchoolClasses должны содержать в себе данные школьных классов (название класса, массив объектов класса Students(ученики)).
Мое решение:
School class:
class School extends SchoolClasses
{
private $school_name;
private $school_classes = array();
function __construct($name)
{
$this->school_name = $name;
}
public function addClass($class_name)
{
array_push($this->school_classes, new SchoolClasses($class_name));
}
public function getClassData()
{
echo '<pre>';
print_r($this->school_classes);
echo '</pre>';
}
public function addStudent($class_id, $classmate_name, $classmate_age)
{
return $this->school_classes[$class_id]->setStudent(
new Students($classmate_name, $classmate_age);
);
}
}
SchoolClasses class:
class SchoolClasses extends Students
{
private $class_name;
private $class_students_array = array();
public function __construct($name)
{
$this->class_name = $name;
}
public function setStudent($student)
{
return array_push($this->class_students_array, $student);
}
}
Students class
class Students
{
private $student_name;
private $student_age;
public function __construct($name, $age)
{
$this->student_name = $name;
$this->student_age = $age;
}
}
main.php
<?php
require_once 'class/School.class.php';
$school_13 = new School("Школа 13");
$school_13->addClass("1В");
$school_13->addClass("2A");
$school_13->getClassData();
$school_13->addStudent(0, "Вася", 7);
$school_13->getClassData();
?>
Вот что выдает $school->getClassData():
До добавления школьных классов:
Array
(
[0] => SchoolClasses Object
(
[class_name:SchoolClasses:private] => 1В
[class_students_array:SchoolClasses:private] => Array
(
)
[student_name:Students:private] => # Здесь
[student_age:Students:private] => # Здесь
)
[1] => SchoolClasses Object
(
[class_name:SchoolClasses:private] => 2A
[class_students_array:SchoolClasses:private] => Array
(
)
[student_name:Students:private] => # Здесь
[student_age:Students:private] => # Здесь
)
)
После:
Array
(
[0] => SchoolClasses Object
(
[class_name:SchoolClasses:private] => 1В
[class_students_array:SchoolClasses:private] => Array
(
[0] => Students Object
(
[student_name:Students:private] => Вася
[student_age:Students:private] => 7
)
)
[student_name:Students:private] => # Здесь
[student_age:Students:private] => # Здесь
)
[1] => SchoolClasses Object
(
[class_name:SchoolClasses:private] => 2A
[class_students_array:SchoolClasses:private] => Array
(
)
[student_name:Students:private] => # Здесь
[student_age:Students:private] => # Здесь
)
)
Не могу понять, откуда берутся записи [student_name:Students:private] и [student_age:Students:private], ведь я их в массив не добавляю.
Причина в наследовании. У вас класс SchoolClasses почему-то наследуется от Students:
class SchoolClasses extends Students
Поэтому в классе SchoolClasses есть параметры, которые он наследует от Students:
private $student_name;
private $student_age;
Видимо, ошибочно наследование написали. Уберите и всё будет как задумано.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники