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

watak

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

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

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

其實還有許多不同的解決方案來完成這項工作 — 取決于你傾向于 面向?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!! 
}

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

創(chuàng)建一個類來放置上面的函數(shù),你就得到了一個「Model」。創(chuàng)建一個簡單的.php文件來存放表示邏輯,你就得到了一個「View」。這已經(jīng)很接近 MVC— 一個大多數(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)代框架的做法學習是很有必要的,盡管多了一些手動的工作。你可以并不需要每一次都完全這么做,但將太多的表示邏輯層代碼和數(shù)據(jù)庫交互摻雜在一些將會為你在想要對程序進行單元測試時帶來真正的麻煩。

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


Artikel sebelumnya: Artikel seterusnya: