Correction status:Uncorrected
Teacher's comments:
本篇文章使用了,以下知识点
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>'; }
点击 "运行实例" 按钮查看在线实例