Как использовать имя динамической переменной для вложенного класса PHP

У меня есть вложенный класс PHP, к которому я могу получить доступ

public function getbookname($bookno){
$namex='No book';
switch($bookno){
case 1:
$namex=$this->book1->bookname;
break;
case 2:
$namex=$this->book2->bookname;
break;
case 3:
$namex=$this->book3->bookname;
break;
}
return $namex;
}

В классе может быть до 50 или около того книг, поэтому мне нужно динамически создавать «bookX». Я искал и нашел как динамически создавать имена переменных.

Так я и сделал

public function getbookname($bookno){
return ${'$this->book' . $bookno. '->bookname'};
}

Но это не работает, я получаю следующую ошибку:

Notice: Undefined variable: $this->book1->bookname in
C:\wamp\www\htdocs\lib4\includes\oop_book.php on line 32

Как вы видете $this->book1->bookname правильный вызов метода

Я тоже пробовал

public function getbookname($bookno){
$methodreturn = ${'$this->book' . $bookno. '->bookname'};
return $methodreturn;
}

С тем же результатом. Пожалуйста помоги.

0

Решение

Нечто подобное должно быть достаточно.

$this->{'book'. $bookno}->bookname;

Прочитайте переменные переменные в руководстве.

Например;

<?php

class books {

private $book1 = "Harry Potter";
private $book2 = "Dracula";
private $book3 = "The Dictionary";

public function getBook($bookno) {
return $this->{'book'. $bookno};
}
}

$books = new books();

echo $books->getBook(2); //Output: Dracula
1

Другие решения

Попробуйте это так:

public function getbookname($bookno){
$methodName = 'book' . $bookno;
return $this->$methodName->bookname;
}
1

Вы должны реструктурировать свой код и использовать вместо него массивы!

Подобно:

   class x {
private $books = array();

public function addBook($book) {
$this->books[] = $book;
}
public function getBookName($no) {
return $this->books[$no]->bookname;
}
}
1

попробуй что-нибудь подобное

public function getbookname($bookno){
return $this->$bookno->bookname;
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector