2014-09-29 3 views
0

У меня есть вложенное 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 "динамически. Я искал и нашел how to create variable names dynamically.

Так что я сделал это

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

попробовать '$ BookName = 'книга'. $ Bookno; return $ this -> $ bookname-> bookname; ' – Rufinus

ответ

1

Что-то вроде этого должно хватить.

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

Есть Распознать variable variables на руководстве.

Например,

<?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 
0

попробовать что-то вроде этого

public function getbookname($bookno){ 
    return $this->$bookno->bookname; 
} 
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; 
    } 
    } 
+0

Реструктуризация - хорошая идея, но не необходимость решить проблему с OPs. –

Смежные вопросы