2014-09-29 108 views
0

我有,我可以通过如何嵌套的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; 
} 

访问一个嵌套的PHP类的类最多可有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;返回$ this - > $ bookname-> bookname;' – Rufinus 2014-09-29 11:17:11

回答

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

重组是一个好主意,但不是解决OP问题的必要条件。 – 2014-09-29 11:27:15