亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

文字

當(dāng)開發(fā)者第一次接觸 PHP 時(shí),通常會(huì)使用類似下面的代碼來將數(shù)據(jù)庫(kù)的交互與表示層邏輯混在一起:

<ul> 
<?php 
foreach ($db->query('SELECT * FROM table') as $row) {     
echo "<li>".$row['field1']." - ".$row['field1']."</li>"; 
} ?> 
</ul>

這從任何方面來看都是錯(cuò)誤的做法,主要是由于它不易調(diào)試,難以閱讀和測(cè)試。而且如果你不加以限制的話,它會(huì)輸出非常多的字段。

其實(shí)還有許多不同的解決方案來完成這項(xiàng)工作 — 取決于你傾向于 面向?qū)ο缶幊蹋∣OP)還是函數(shù)式編程 — 但必須有一些分離的元素。

來看一下最基本的做法:

<?php 
function getAllFoos($db) {     
return $db->query('SELECT * FROM table'); 
} 
foreach (getAllFoos($db) as $row) {     
echo "<li>".$row['field1']." - ".$row['field1']."</li>"; // BAD!! 
}

這是一個(gè)不錯(cuò)的開頭。將這兩個(gè)元素放入了兩個(gè)不同的文件于是你得到了一些干凈的分離。

創(chuàng)建一個(gè)類來放置上面的函數(shù),你就得到了一個(gè)「Model」。創(chuàng)建一個(gè)簡(jiǎn)單的.php文件來存放表示邏輯,你就得到了一個(gè)「View」。這已經(jīng)很接近 MVC— 一個(gè)大多數(shù)框架常用的面向?qū)ο蟮募軜?gòu)。

foo.php

<?php 
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password'); // Make your model available 
include 'models/FooModel.php'; 
// Create an instance 
$fooModel = new FooModel($db); 
// Get the list of Foos 
$fooList = $fooModel->getAllFoos(); 
// Show the view 
include 'views/foo-list.php';
models/FooModel.php
<?php 
class FooModel {     
protected $db;     
public function __construct(PDO $db){         
$this->db = $db;     
}     
public function getAllFoos() {
        return $this->db->query('SELECT * FROM table');     
    } 
}

views/foo-list.php

<?php foreach ($fooList as $row): ?>     
<?= $row['field1'] ?> - <?= $row['field1'] ?> <?php endforeach ?>

向大多數(shù)現(xiàn)代框架的做法學(xué)習(xí)是很有必要的,盡管多了一些手動(dòng)的工作。你可以并不需要每一次都完全這么做,但將太多的表示邏輯層代碼和數(shù)據(jù)庫(kù)交互摻雜在一些將會(huì)為你在想要對(duì)程序進(jìn)行單元測(cè)試時(shí)帶來真正的麻煩。

PHPBridge 具有一項(xiàng)非常棒的資源叫做創(chuàng)建一個(gè)數(shù)據(jù)類。它包含了非常相似的邏輯而且非常適合剛剛習(xí)慣數(shù)據(jù)庫(kù)交互概念的開發(fā)者使用。


上一篇: 下一篇: