2014-09-29 109 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