Привет, у меня есть один класс как дочерний и один класс как родительский. Один класс снова как информация для писателя.Как передать массив объектов в функции PHP OOP
Я получаю сообщение об ошибке при передаче массива из двух объектов (объект из двух дочерних классов) в функции класса писателя. Я получаю это:
Catchable fatal error: Argument 1 passed to PersonWriter::setData() must be an instance of
Person, array given, called in C:\xampp\htdocs\php\oop\book\Person.php on line 62 and
defined in C:\xampp\htdocs\php\oop\book\Person.php on line 40
Мои вопросы:
- У меня есть один дочерний класс, который непосредственно потомок родительского класса. И я создаю метод, используя тип класса Parent. Почему бы не работать?
- Как это исправить?
Это мой код:
<?php
// Class Person
class Person {
public $name;
public $gender;
public $age;
public function __construct($name, $gender, $age) {
$this->name = $name;
$this->gender = $gender;
$this->age = $age;
}
public function getInfo() {
$info = "Name : $this->name<br/>Gender : $this->gender<br/>Age : $this->age";
return $info;
}
}
// Class Mahasiswa
class Mahasiswa extends Person {
public $npm;
public function __construct($npm, $name, $gender, $age) {
parent::__construct($name, $gender, $age);
$this->npm = $npm;
}
public function getInfo() {
$info = "NPM : $this->npm<br/>";
$info .= parent::getInfo();
return $info;
}
}
// Class PersonWriter
class PersonWriter {
private $persons = array();
public function setData(Person $persons) {
$this->persons[] = $persons;
}
public function write() {
$str = "";
foreach ($this->persons as $person) {
$str = "Name : $person->name<br/>";
$str .= "Gender : $person->gender<br/>";
$str .= "Age : $person->age<br/>";
}
echo $str;
}
}
// Create 2 objects
$mhs = new Mahasiswa("201143579091","Fandi Akhmad", "L", 21);
$mhs2 = new Mahasiswa("201143579092","Annisya Ferronica", "P", 19);
// Add objects to Array
$persons = array($mhs, $mhs2);
$writer = new PersonWriter();
$writer->setData($persons);
$writer->write();
?>
Ответ:
- В примере кода, который проверяется в ответ ниже.
- О, ладно, я поймаю его. Я знаю, что понимаю мою функцию setData (Person $ persons) Потому что в моей книге не рассказывайте объяснения.
Теперь я добавить объект человека в массив как:
<?php ...
$writer->setData($mhs);
$writer->setData($mhs2);
?>
И я отредактировал мою функцию, как это:
public function write() {
$str = "";
foreach ($this->persons as $person) {
$str = "Name : $person->name<br/>";
$str .= "Gender : $person->gender<br/>";
$str .= "Age : $person->age<br/>";
echo "<br/>";
echo $str;
}
}
И он работает сейчас.
Прочитать сообщение об ошибке. Вы намекаете на экземпляр Person в методе, но хотите передать массив. –
Да, я понимаю это сообщение об ошибке, и я хочу передать массив объектов в функцию. Как это сделать? – fanjavaid
Передача массива. И не намекая на экземпляр «Человека». –