Почему не работает array_push() в классе?
У меня есть класс. Там есть метод, который добавляет (должен) добавлять новый элемент в конец массива. Вместо этого происходит ахинея.
Вместо одного элемента в конец массива добавляется 3 элемента, при том добавляется только один первый символ.
Вопрос: что я делаю не так? Как исправить эту проблему?
UPD.
То, что добавляется в конец массива:

А мне надо чтобы вместо того, что добавилось - добавилась одна запись: Круглов Илья 20
class.php
class Students {
.......
public $arr=array();
public function AddStud($surname, $name, $age) {
array_push($this->arr, "$surname", "$name", "$age");
}
}
index.php
................
<?
include 'class.php';
$s = new Students;
$s->AddStud("Круглов", "Илья", 20);
?>
UPD2. Информацию вывожу в таблицу следующим образом:
<table>
<? foreach ($s->arr as $f) { ?>
<tr>
<td><? echo $f["Фамилия"]; ?></td>
<td><? echo $f["Имя"]; ?></td>
<td><? echo $f["Возраст"]; ?></td>
</tr>
<? } ?>
</table>
Ответы (1 шт):
Ваша проблема у меня не воспроизводится. Но есть так или иначе куча других проблем.
Само добавление
array_push($this->arr, "$surname", "$name", "$age");некорректно, потому что вы добавляете в нумерованный массив данные. И получается вот что:$s->AddStud("Круглов", "Илья", 20); $s->AddStud("Привет", "Андрей", 30); Array ( [0] => Круглов [1] => Илья [2] => 20 [3] => Привет [4] => Андрей [5] => 30 )Как вы понимаете это совсем не корректно.
Если даже исправить пуш на этот:
array_push($this->arr, [$surname, $name, $age]);То получим что-то уже лучшее:
Array ( [0] => Array ( [0] => Круглов [1] => Илья [2] => 20 ) [1] => Array ( [0] => Привет [1] => Андрей [2] => 30 ) )Но даже в случае выше, работа у вас просто неверна сразу. Потому что класс в данном случае должен знать только о себе и ни о каких других пользователях. По сути, студент - это отдельная сущность, и он должен знать только о себе: о своей фамилии, о своём имени и своём возрасте. А вы пихаете ему всё сразу.
Тут надо либо просто отдельно массив с пользователями хранить:
<?php class Student { public $lastname; public $name; public $age; public function __construct($lastname, $name, $age) { $this->lastname = $lastname; $this->name = $name; $this->age = $age; } } $staticData = [ ['lastname' => "Круглов", 'name' => "Илья", 'age' => 20], ['lastname' => "Привет", 'name' => "Андрей", 'age' => 30], ]; $arrOfStudenrs = []; foreach ($staticData as $data) { $arrOfStudenrs[] = new Student($data['lastname'], $data['name'], $data['age']); } print_r($arrOfStudenrs); Array ( [0] => Student Object ( [lastname] => Круглов [name] => Илья [age] => 20 ) [1] => Student Object ( [lastname] => Привет [name] => Андрей [age] => 30 ) )Либо делать итерируемую коллекцию со студентами
class UserRepository { public $studenrts = []; public function addStudend(Student $student) { array_push($this->studenrts , $student)); } // методы для итерирования и доступа к коллекции }И уже работать с этой коллекцией
На самом деле на этом проблемы не заканчиваются. Там ещё много нюансов. Но это вам нужно учить ООП. Долго. :)