我正在使用php大约4年了,但我还没有在我自己的任何脚本上使用OOP方法。我真的很想使用它,因为我听说过,我理解它使开发变得更容易。 例如下面的代码,它是一个简单的mysql-select,获取类别,从结果我正在构建一个表单元素,一个下拉菜单,还有一些步骤涉及像fes sorts与natcasesort()一样。 Atm我会为国家重做相同的程序,我会再次编写相同的代码,只有那些类别会被国家替换,如你所见:
$result1 = mysql_query("SELECT * from categories WHERE hidden = 0");
while ($row = mysql_fetch_array($result1)) {
$cat_names = explode(",",$row['title_mulilingual']);
$categories[$row['uid']] = $cat_names[$lang_id];
}
natcasesort($categories);
foreach ($categories as $key => $value) {
if ($key == $active_key) $selected = ' selected="selected"';
else $item_selected = '';
$select_fields['cat_id'] .= '<option'.$selected.' value="'.$key.'">'.$value.'</option>';
}
$cat_select = '<select name="category" >'.$select_fields['cat_id'].'</select>';
// the following part is the same as the first one, it only handles countries instead of categories
$result2 = mysql_query("SELECT * from countries WHERE hidden = 0");
while ($row = mysql_fetch_array($result2)) {
$country_names = explode(",",$row['title_mulilingual']);
$countries[$row['uid']] = $country_names[$lang_id];
}
natcasesort($countries);
foreach ($countries as $key => $value) {
if ($key == $active_key) $item_selected = ' selected="selected"';
else $selected = '';
$select_fields['country_id'] .= '<option'.$selected.' value="'.$key.'">'.$value.'</option>';
}
$country_select = '<select name="country" >'.$select_fields['country_id'].'</select>';
所以在代码中它显然不是OOP。但我猜,通过使用OOP,我可以做到这一点,对吗?通过将这个例子作为OOP示例,有人可以帮助我更好地理解OOP吗? 提前致谢, 杰登
答案 0 :(得分:2)
通过将此示例设为OOP示例,有人可以帮助我更好地理解OOP吗?
嘿,您可以使用像MVC这样的框架轻松将其移植到OOP中。
MVC Structure http://php-html.net/tutorials/wp-content/uploads/2009/08/mvc-collaboration.png
“模型 - 视图 - 控制器(MVC)是计算机用户界面的设计模式,它将应用程序划分为三个责任区域:
- 模型:表示应用程序状态的域对象或数据结构。
- 视图,它观察状态并为用户生成输出。
- Controller,将用户输入转换为模型上的操作。“(Wikipedia,2012)
一些非常好的OOP框架已经可用。
可以找到关于如何创建模型视图控件的好教程here。
控制器
这将检索数据,然后将其发送到要处理的模型。
include_once("model/Model.php");
class Controller {
public $model;
public function __construct()
{
$this->model = new Model();
}
public function invoke()
{
if (!isset($_GET['book']))
{
// no special book is requested, we'll show a list of all available books
$books = $this->model->getBookList();
include 'view/booklist.php';
}
else
{
// show the requested book
$book = $this->model->getBook($_GET['book']);
include 'view/viewbook.php';
}
}
}
模型
它处理要呈现的数据
include_once("model/Book.php");
class Model {
public function getBookList()
{
// here goes some hardcoded values to simulate the database
return array(
"Jungle Book" => new Book("Jungle Book", "R. Kipling", "A classic book."),
"Moonwalker" => new Book("Moonwalker", "J. Walker", ""),
"PHP for Dummies" => new Book("PHP for Dummies", "Some Smart Guy", "")
);
}
public function getBook($title)
{
// we use the previous function to get all the books and then we return the requested one.
// in a real life scenario this will be done through a db select command
$allBooks = $this->getBookList();
return $allBooks[$title];
}
}
class Book {
public $title;
public $author;
public $description;
public function __construct($title, $author, $description)
{
$this->title = $title;
$this->author = $author;
$this->description = $description;
}
}
查看
提供数据。
<?php
echo 'Title:' . $book->title . '<br/>';
echo 'Author:' . $book->author . '<br/>';
echo 'Description:' . $book->description . '<br/>';
?>
根据我的经验,我发现使用框架比在Web应用程序中从头开始学习OOP更容易。
Theres也是一个很好的教程,可以在nettuts上创建自己的框架,可以找到here,如果您不理解上述信息,那么本教程不会让您感到压力。