
批改狀態(tài):合格
老師批語:每個人都會有這個過程, 你覺得有難度, 其它人也是一樣, 搞明白了你就贏了
<?php
namespace _1204;
//如果不引用PDO 在當前命名空間下是找不到PDO 或者這里不引用在下面用到的時候?qū)?PDO
use PDO;
//static 聲明靜態(tài)成員
//1.創(chuàng)建類
class Db1
{
//2.添加類成員
//非靜態(tài)成員 在動態(tài)數(shù)據(jù)區(qū) 隨函數(shù)執(zhí)行完就釋放
public $name;
public function demo(){
echo '普通成員';
}
//靜態(tài)成員 靜態(tài)數(shù)據(jù)區(qū) (全局變量、靜態(tài)變量)
//只要程序在 靜態(tài)數(shù)據(jù)就在
//靜態(tài)區(qū)數(shù)據(jù)被所有類的對象所共享
//靜態(tài)屬性
protected static $pdo;
protected static $dsn = 'mysql:host=localhost;dbname=php_2019';
protected static $username = 'root';
protected static $password = '12341234';
//靜態(tài)方法
//***靜態(tài)方法里無法使用動態(tài)屬性
public static function connect(){
self::$pdo = new PDO(self::$dsn,self::$username,self::$password);
}
public static function select(){
self::connect();
return self::$pdo->query('select * from `user`',PDO::FETCH_ASSOC);
}
}
//3.訪問類成員
$res = Db1::select();
foreach ($res as $row){
echo '<pre>' .print_r($row,true). '</pre>';
}
<?php
namespace _1204;
use PDO;
//static 后期靜態(tài)綁定
//1.創(chuàng)建類
class Db2
{
//2.添加類成員
//靜態(tài)成員 靜態(tài)數(shù)據(jù)區(qū) (全局變量、靜態(tài)變量)
//只要程序在 靜態(tài)數(shù)據(jù)就在
//靜態(tài)區(qū)數(shù)據(jù)被所有類的對象所共享
//靜態(tài)屬性
protected static $pdo;
protected static $dsn = 'mysql:host=localhost;dbname=php_2019';
protected static $username = 'root';
protected static $password = 'root';
//靜態(tài)方法
public static function connect(){
self::$pdo = new PDO(self::$dsn,self::$username,self::$password);
}
public static function select(){
//當前self::connect()改為static::connect()
static::connect();
//靜態(tài)方法繼承時 static可以自動轉(zhuǎn)換目標為當前調(diào)用類
return self::$pdo->query('select * from `user`',PDO::FETCH_ASSOC);
}
}
class Sub extends Db2
{
protected static $username = 'root';
protected static $password = '12341234';
public static function connect(){
self::$pdo = new PDO(self::$dsn,self::$username,self::$password);
}
}
//3.訪問類成員
$res = Sub::select();
foreach ($res as $row){
echo '<pre>' .print_r($row,true). '</pre>';
}
<?php
namespace mvc;
//模型類:用于數(shù)據(jù)表的操作
class Model
{
//在模型類用getData拿到數(shù)據(jù)
public function getData(){
//二維數(shù)組模擬數(shù)據(jù)庫獲取的商品數(shù)據(jù)
return [
[
'id' => 1,
'name' =>'蘋果電腦',
'model'=>'MacBook1',
'price'=>'20000'
],
[
'id' => 2,
'name' =>'華為電腦',
'model'=>'HUAWEIBook1',
'price'=>'12000'
],
[
'id' => 3,
'name' =>'小米電腦',
'model'=>'MIBook1',
'price'=>'2000'
],
[
'id' => 4,
'name' =>'戴爾電腦',
'model'=>'DELLBook1',
'price'=>'4000'
]
];
}
}
<?php
namespace mvc;
//視圖:渲染數(shù)據(jù)
class View
{
//在視圖類用fetch渲染數(shù)據(jù) 這里接收一個data
public function fetch($data){
//拼接html頁面內(nèi)容
$table = '<table>';
$table .= '<caption>商品信息表</caption>';
$table .= '<tr><th>ID</th><th>品名</th><th>型號</th><th>價格</th></tr>';
foreach ($data as $product){
$table .='<tr>';
$table .='<td>'. $product['id'] .'</td>';
$table .='<td>'. $product['name'] .'</td>';
$table .='<td>'. $product['model'] .'</td>';
$table .='<td>'. $product['price'] .'</td>';
$table .='</tr>';
}
$table .= '</table>';
return $table;
}
}
echo '
<style>
table {
border-collapse: collapse;
border: 1px solid;
width: 500px;
height: 150px;
margin:auto;
}
caption {
font-size:1.2rem;
margin-bottom: 10px;
}
tr:first-of-type{
background-color:lightblue;
}
td,th{
border:1px solid
}
td:first-of-type{
text-align:center;
}
</style>
';
<?php
//mvc
//控制器 最初版本
namespace mvc;
//加載
require 'Model.php';
require 'View.php';
class Controller1
{
public function index(){
//1.獲取數(shù)據(jù)
//實例化model類 得到model對象$model
$model = new Model();
//調(diào)用Model類里面的getData方法 得到return的數(shù)據(jù)賦值給$data
$data = $model->getData();
//2.渲染模板
//實例化View類
$view = new View();
//返回 將$data傳給View類中fetch方法后得到的頁面
return $view->fetch($data);
}
}
//客戶端調(diào)用
//實例化
$Controller1 = new Controller1();
echo $Controller1->index();
<?php
//mvc
//控制器 解決依賴
//依賴注入-初步
namespace mvc;
//加載
require 'Model.php';
require 'View.php';
class Controller2
{
public function index(Model $model, View $view){
//1.獲取數(shù)據(jù)
//調(diào)用Model類里面的getData方法 得到return的數(shù)據(jù)賦值給$data
$data = $model->getData();
//2.渲染模板
//返回 將$data傳給View類中fetch方法后得到的頁面
return $view->fetch($data);
}
}
//客戶端調(diào)用
//將實例化代碼從控制器中拿出來 放到客戶端
//實例化model類 得到model對象$model
$model = new Model();
//實例化View類
$view = new View();
//將對象以參數(shù)的形式注入
//實例化Controller
$Controller2 = new Controller2();
echo $Controller2->index($model,$view);
<?php
//mvc
//控制器 解決依賴
//依賴注入-中等
namespace mvc;
//加載
require 'Model.php';
require 'View.php';
class Controller3
{
protected $model;
protected $view;
//注入到普方法中注入一次只能用一次,實現(xiàn)一個類注入一次多次使用
//更改注入點到構(gòu)造方法中
//創(chuàng)建構(gòu)造函數(shù)
public function __construct(Model $model, View $view){
//傳值
$this->model = $model;
$this->view = $view;
}
public function index(){
//1.獲取數(shù)據(jù)
//調(diào)用Model類里面的getData方法 得到return的數(shù)據(jù)賦值給$data
//改為$this調(diào)用
$data = $this->model->getData();
//2.渲染模板
//返回 將$data傳給View類中fetch方法后得到的頁面
//改為$this調(diào)用
return $this->view->fetch($data);
}
}
//客戶端調(diào)用
$model = new Model();
$view = new View();
//實例化Controller
//更改注入點
$Controller3 = new Controller3($model,$view);
echo $Controller3->index();
<?php
//mvc
//控制器 解決依賴
//依賴注入-高級
namespace mvc;
//加載
require 'Model.php';
require 'View.php';
/**************************************/
//添加簡單服務(wù)容器層
class Container
{
// 容器屬性
// 很多類實例 是一個數(shù)組
protected $instance = [];
//放進去 bind方法
//$alias 鍵名 類的別名 $process 一段實例化代碼
public function bind($alias,\CLosure $process){
//將類實例化方法存儲入容器中
//相當于實例化代碼的模板
$this->instance[$alias] = $process;
}
//拿出來 執(zhí)行容器調(diào)用 make方法 $params可以看成構(gòu)造函數(shù)需要傳入的參數(shù)
public function make($alias,$params=[]){
//call_user_func_array 調(diào)用回調(diào)函數(shù),并把一個數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)
return call_user_func_array($this->instance[$alias], []);
}
}
//實例化容器
$container = new Container();
//將模型、視圖綁定到容器
$container->bind('model',function(){return new Model();});
$container->bind('view',function(){return new View();});
/**************************************/
//控制器
class Controller4
{
//不需要構(gòu)造函數(shù)了。
//注入容器即可
public function index(Container $container){
//1.獲取數(shù)據(jù)
//通過容器獲取model類的實例調(diào)用getData方法
$data = $container->make('model')->getData();
//2.渲染模板
//返回通過容器獲取的view類實例生成的頁面數(shù)據(jù)
return $container->make('view')->fetch($data);
}
}
//客戶端調(diào)用
//實例化Controller
//index方法傳入?yún)?shù)——容器對象
$Controller4 = new Controller4();
echo $Controller4->index($container);
<?php
//mvc
//控制器 解決依賴
//依賴注入-高級+
namespace mvc;
//加載
require 'Model.php';
require 'View.php';
/**************************************/
//添加簡單服務(wù)容器層
class Container1
{
// 容器屬性
// 很多類實例 是一個數(shù)組
protected $instance = [];
//放進去 bind方法
//$alias 鍵名 類的別名 $process 一段實例化代碼
public function bind($alias,\CLosure $process){
//將類實例化方法存儲入容器中
//相當于實例化代碼的模板
$this->instance[$alias] = $process;
}
//拿出來 執(zhí)行容器調(diào)用 make方法 $params可以看成構(gòu)造函數(shù)需要傳入的參數(shù)
public function make($alias,$params=[]){
//call_user_func_array 調(diào)用回調(diào)函數(shù),并把一個數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)
return call_user_func_array($this->instance[$alias], []);
}
}
//實例化容器
$container = new Container1();
//將模型、視圖綁定到容器
$container->bind('model',function(){return new Model();});
$container->bind('view',function(){return new View();});
/**************************************/
//添加Facede門面層
//將常用到的方法封裝成靜態(tài)
class Facede
{
protected static $container = null;
protected static $data = [];
//初始化方法
public static function initialize(Container1 $container){
static::$container = $container;
}
//靜態(tài)化getData
public static function getData(){
static::$data = static::$container->make('model')->getData();
}
//靜態(tài)化fetch
public static function fetch(){
return static::$container->make('view')->fetch(static::$data);
}
}
/**************************************/
//控制器
class Controller5
{
public function __construct($container){
//調(diào)用Facede里面的初始化方法
Facede::initialize($container);
}
public function index(){
//1.獲取數(shù)據(jù)
Facede::getData();
//2.渲染模板
return Facede::fetch();
}
}
//客戶端調(diào)用
//實例化Controller
//controller傳入$container
$Controller5 = new Controller5($container);
echo $Controller5->index();
手抄
總結(jié):課上聽懂百分之10,今天又看了兩遍懂了百分之30了,大不了看十遍唄。傳參那塊比較迷,括號內(nèi)先定義個類型在寫上變量這種寫法第一次見,不了解也不太懂。有點好奇,這樣一次次的改進,代碼看著越來越高大上了,它是誰想出來的呢又是怎么大家都開始使用經(jīng)歷了個什么過程呢?
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號