2015-09-28 15 views
0

這個問題已經回答了很多次,但我無法在這裏找到合適的解決方案。試圖在簡單的PHP MVC代碼中獲取非對象的屬性

剛接觸php MVC framework.am試圖執行一個在線的代碼。這裏的HTML頁面顯示罰款與組合框進行選擇,但是當我選擇一個項目並提交獲取此錯誤。任何人都可以幫助我理解問題並解決它。

下面是代碼

Book類:

class Book 
{ 
    public $name; 
    public $version; 
    public $yop; 

    public function __construct($name, $version, $yop) 
    { 
     $this -> name = $name; 
     $this -> version = $version; 
     $this->yop=$yop; 
    } 
} 

模型類:

class Model 
{ 
    public $text; 

    public function __construct() 
    { 
     $this->text="Book selection"; 
    } 

    public function getBookList() 
    { 
     return array(
      'PHP for Absolute Beginners' => new Book ('PHP for Absolute Beginners', '1.2', '1999'), 
      'Basic Introduction to PHP MVC' => new Book ('Basic Introduction to PHP MVC', '1.0', '2008'), 
      'Advanced PHP' => new Book ('Advanced PHP', '1.2', '2004'), 
      'Advanced PHP MVC' => new Book ('Advanced PHP MVC', '2.0', '2014') 
     ); 
    } 

    public function getBook($name) 
    { 
     $allBooks= $this->getBookList(); 

     return $allBooks; 
    } 
} 

控制器類:

class Controller 
{ 
    public $model; 

    public function __construct(Model $model) 
    { 
     $this->model=$model; 
    } 

    public function invoke() 
    { 
     if (!isset($_GET['book'])) { 
      return $this->model->getBookList(); 

     } else { 
      return '<h2>'.$this->model ->text.'</h2>'; 
     } 
    } 

    public function output() 
    { 
     return'<h1>' . $this -> model -> text . '</h1>'; 
    } 
} 

最後這是視圖

$model = new Model(); 
$controller = new Controller($model); 

echo $controller-> output(); 

$books = $controller ->invoke(); 

if ($_SERVER['REQUEST_METHOD'] === "GET") { 

    if (isset($_GET['book'])) { 
     echo "You selected " . $books->name . " version: " . $books->version . " Year of published: " . $books->yop; 

     exit(); 
    } 
} 

這是提交數據

<form method="GET" action=""> 
    <select name="book"> 
     <?php 
      foreach ($books as $x=>$x_value) { 
       echo '<option value="' . $x . '">' . $x . '</option>'; 
      } 
     ?> 
    </select> 
    <input type="submit" value="Select" name="submit"> 
</form> 

任何建議,請在HTML表單..

回答

0

如果isset GET變量 '書' 你返回字符串(return '<h2>'.$this->model ->text.'</h2>';)。所以結果在這個變量 - $books = $controller ->invoke();將字符串和$books->name導致錯誤

+0

抱歉,我不明白。當我print_r($書),我得到了這個結果數組([絕對初學者的PHP] =>圖書對象([名稱] => PHP的絕對初學者[版本] => 1.2 [喲] => 1999年] [基本介紹到PHP MVC] => Book Object([name] => PHP MVC基礎入門[版本] => 1.0 [yop] => 2008)[Advanced PHP] => Book Object([name] => Advanced PHP [version ] => 1.2 [yop] => 2004)[Advanced PHP MVC] => Book Object([name] => Advanced PHP MVC [version] => 2.0 [yop] => 2014)) –

+0

在這種情況下, ,所以你必須這樣寫:$ books ['絕對初學者的PHP] - >名字 – SevStryker

+0

它的部分作品。謝謝。但是當我選擇不同的書時,它顯示出相同的價值。我可以得到數組中字符串的索引值嗎?像$ books [1] - > name,而不是$ books ['PHP for Absolute Beginners'] - >名字 –

相關問題