批改状态:未批改
老师批语:
本篇文章使用了,以下知识点
1.命名空间
2.类继承
3.后期绑定
4.接口
遗留问题
1本篇文章有一个干扰了我很久的难点,这个问题现在都还没有解决
问题在38行,就是为什么self是访问db类里面的config,而不是link里面的重写的config类
我在下面调用的时候也是使用link的类
2.接口继承的不需要使用 $this 吗?
42行
// 预处理sql语句,可以防止sql注入
$stmt = $pdo->prepare($sql);
$stmt = $this->$pdo->prepare($sql);
// 测试发现好像加不加$this都可以访问
<?php
namespace db;
use PDO;
$sql ='SELECT * FROM `staff` LIMIT :num OFFSET :offset';
// 接口
interface iCurd
{
// 查询数据
public function cx();
}
// 接口继承
class Db implements iCurd
{
// 使用connect来调用config
public static function connect()
{
return static::config();
}
// 被connect调用的config数据库连接静态方法
public static function config()
{
return new PDO('mysql:host=127.0.0.1;dbname=php','root','123456');
}
// 查询
public function cx()
{
// 在查询方法里面我也使用了config方法,不知道为什么不添加这个查询方法用不了,我怀疑是没有连接数据库问题,但是我又想不出其他方法解决
// 这里为什么是访问Db类里面的config方法,而不是访问link里面的config方法?
$pdo = self::config();
// sql查询语句
$sql = 'SELECT * FROM `staff` LIMIT 5';
// 预处理sql语句,可以防止sql注入
$stmt = $pdo->prepare($sql);
// 执行sql语句
$stmt->execute();
// echo 'aegawg';
// 返回二维数组表示的查询结果集
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
// Db的继承子类
class link extends Db
{
// 静态方法,重写config
public static function config()
{
return new PDO('mysql:host=localhost;dbname=php','root','root');
}
}
// var_dump($pdo);
$d = new link();
// echo $d();
// var_dump($d);
// 这个是直接使用了类里面的cx方法
foreach ($d->cx() as $it){
echo "<li>名字:{$it['name']}--年龄:{$it['age']}----职位:{$it['position']}</li>";
}
echo '<hr>';
$pdo = link::connect();
// 使用$pdo里面的链接参数,然后在类外面设置sql语句
// 第二个遍历方法
$staffs = $pdo->query('SELECT * FROM `staff` LIMIT 5');
foreach ($staffs as $staff) {
print_r($staff); echo '<br>';
}点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号