2015-09-28 16 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'] - >名字 –

相关问题