如何为嵌套的PHP类使用动态变量名

时间:2014-09-29 11:13:35

标签: php jquery class

我有一个嵌套的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;
}

结果相同。请帮忙。

4 个答案:

答案 0 :(得分:1)

试试这样:

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

答案 1 :(得分: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

答案 2 :(得分:1)

您应该重新构建代码并改为使用数组!

喜欢:

   class x {
     private $books = array();

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

答案 3 :(得分:0)

尝试这样的事情

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