批改状态:合格
老师批语:没写完, 双色球案例呢?
<?php//连接参数return [//类型'type' => $type ?? 'mysql',//默认主机名'host' => $username ?? 'localhost',//默认编码集'charset' => $charset ?? 'utf8',//默认端口号'port' => $porst ?? '3306',//默认用户名'username' => $usernam ?? 'root',//默认用户密码'password' => $password ?? 'root',//默认数据库'dbname' => $dbname ?? 'phpedu',];?>
<?php//使用pdo方式连接数据库//1.导入配置参数$config = require __DIR__ . '\\config.php';extract($config);$dsn = sprintf('%s:host=%s;dbname=%s', $type, $host, $dbname);$pdo = new PDO($dsn, $username, $password);//设置结果集获取模式,仅返回关联部分$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);?>
<?php// pdo 新增操作require __DIR__ .'/connect.php';$sql = 'INSERT `users` SET `name`=:name, `email`=:email, `password`=:password;';$stmt = $pdo->prepare($sql);$res = $stmt->execute(['name'=>'lisi', 'email'=>'zhaoliu@php.cn', 'password'=>sha1('987')]);if (true === $res) {if ($stmt->rowCount() === 1){echo '成功新增了' .$stmt->rowCount() .'条记录...,新增的主键ID = ' .$pdo->lastInsertId();}}unset($pdo);?>

<?php// pdo 更新操作require __DIR__ .'/connect.php';$sql = 'UPDATE `users` SET `name`= ?, `email`= ?, `password`= ? WHERE `id`= ?;';$stmt = $pdo->prepare($sql);$stmt->execute(['yangguo', 'yangguo@php.cn', sha1('112'), 12]);echo $stmt->rowCount() === 1 ? '成功更新了' . $stmt->rowCount() . '条记录': '没有记录被更新';$pdo = null;?>

<?php// pdo 删除操作 (简化版本)require __DIR__ .'/connect.php';$sql = 'DELETE FROM `users` WHERE `id`= ?;';$stmt = $pdo->prepare($sql);$stmt->execute([12]);echo $stmt->rowCount() === 1 ? '成功删除了' . $stmt->rowCount() . '条记录': '没有记录被删除';$pdo = null;?>

fetch() + while()
<?phprequire __DIR__ .'/connect.php';$sql = 'SELECT `id`, `name`, `email` FROM `users` WHERE `id`>= ?;';$stmt = $pdo->prepare($sql);if ($stmt->execute([13])) {while($user = $stmt->fetch()) {printf('<pre>%s</pre>', print_r($user, true));}} else {printf('<pre>%s</pre>', print_r($stsm->errorInfo(), true));$stmt->debugDumpParams();}$pdo = null;?>

fetchAll() + foreach()
<?phprequire __DIR__ .'/connect.php';$sql = 'SELECT `id`, `name`, `email` FROM `users` WHERE `id`>= ?;';$stmt = $pdo->prepare($sql);if ($stmt->execute([13])) {$users = $stmt->fetchAll();foreach($users as $user){vprintf('<li>id = %d, name = %s, email = %s</li>', $user);}} else {printf('<pre>%s</pre>', print_r($stsm->errorInfo(), true));$stmt->debugDumpParams();}$pdo = null;?>

<?php// trait:代码复用,将公共部分提取到一个trait类中trait tDemo{public function getProps(){// return __CLASS__:当前类名称,等价于:self::classreturn sprintf('<pre>%s</pre>', print_r(get_class_vars(self::class), true));}}class User1{use tDemo;protected $name = '张三';protected $gender = '女';}class User2{use tDemo;protected $name = '李四';protected $gender = '男';}echo (new User1)->getProps();echo (new User2)->getProps();?>

<?php// trait:支持继承trait tDemo{// 静态属性public static $name = 'trait...';// 静态方法public static function hello(){return 'trait method name:'. __METHOD__;}}// 用的是抽象类使用traitabstract class Dad{use tDemo;}// Son允许直接向最终用户开放的接口class Son extends Dad{}echo Son::$name, '<br>';echo Son::hello();?>

<?php// trait:扩展trait tDemo1{// 获取类中所有属性public function getProps(){return sprintf('<pre>%s</pre>', print_r(get_class_vars(self::class), true));}}trait tDemo2{// 获取类中所有方法public function getMethods(){return sprintf('<pre>%s</pre>', print_r(get_class_methods(self::class), true));}}// trait支持功能整合,trait中允许再引入traittrait tDemo3{use tDemo1, tDemo2;}class Work1{use tDemo1, tDemo2;public $name = 'apple';public $price = 2;public function getInfo(){return $this->name. ':'. $this->price;}}$work1 = new Work1;echo $work1->getMethods();echo $work1->getProps();class Work2{use tDemo3;public $name = 'apple';public $price = 2;public function getInfo(){return $this->name. ':'. $this->price;}}$work2 = new Work2;echo $work2->getMethods();echo $work2->getProps();?>

<?php// php是典型的单继承式语言// 接口可以突破这种限制,实现多接口继承// 接口之间允许继承,并且支持多继承// 实现类可以同时实现多个接口// 可以有两种实现方案:// 1.将多个接口进行整合,形成一个统一的接口,然后用一个实现类来实现它// 2.一个实现类同时实现多个接口,实现类的功能组合,是一种横向的功能扩展// 接口1interface iUser{const NATION = 'CHINA';}// 接口2interface iUser1 extends iUser{const USER_NAME = 'peter';}// 接口3interface iUser2 extends iUser, iUser1{public static function write();}// 实现类// 单接口class User implements iUser{}echo User::NATION, '<hr>';//多接口实现class User1 implements iUser1{}echo User1::NATION, User1::USER_NAME, '<hr>';class User2 implements iUser2{public static function write(){return '姓名:'. iUser1::USER_NAME. ',国籍:'. iUser::NATION;}}echo User2::write();?>

<?php// trait与interface组合interface iDemo{public static function index();}// 不用普通的工作类来实现接口中的抽象方法// 用trait来实现trait tDemo{// 将抽象类的实现代码写到trait中public static function index(){return 'hello world';}}abstract class Hello implements iDemo{use tDemo;}class Work extends Hello{}// echo hello::index();echo Work::index();?>
<?php// 接口 + 抽象类 + trait + class// 奖品数组$prizes = ['电脑', '手机', '平板', '微单', '背包'];//通用的接口interface iCreateId{public static function generateId($min, $max);}//公共方法trait createId{public static function generateId($min, $max){return mt_rand($min, $max);}}// 实现类/工作类class Drawprize implements iCreateId{use createId;// 开奖public static function award($prizes, $id){return $prizes[$id];}}$prizes = ['电脑', '手机', '平板', '微单', '背包'];$id = DrawPrize::generateId(0, 4);$prize = Drawprize::award($prizes, $id);printf('你的奖品是:<span style="color:red">%s</span>', $prize);?>

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号