博主信息
博文 57
粉丝 0
评论 0
访问量 57844
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
定义静态成员绑定
藍錄的博客
原创
921人浏览过

实例

<?php
/**
 * static 关键字的用途:
 * 1. 定义静态成员;
 * 2. 后期静态绑定
 *
 * 后期静态绑定:静态继承的上下文环境,用于动态设置静态方法的调用者
 */
class One
{
    public static function hello()
    {
        return __METHOD__;  // 返回当前方法名
    }

    public static function world()
    {
//        return self::hello();
        return static::hello();
    }
}

class Two extends One
{
    public static function hello()
    {
        return __METHOD__;  // 返回当前方法名
    }
}
// 静态继承上下文执行环境: 静态继承
echo Two::hello();
echo '<hr>';

echo Two::world(); //One::hello
//代码结果看上去似乎是正确的,但是业务逻辑说不通
//在子类Two中将父类中的hello()进行重写,在调用world()时,本意是想调用子类中已重写的方法hello()
// 并不想调用父类的,在父类中却不能正确识别出当前的调用者是哪个?

// 代码执行分二种个阶段: 前期:编译阶段, 后期:运行阶段
// 这种在运行阶段才确定方法的调用者的技术: 后期[运行阶段]静态绑定, 延迟静态绑定

//将 static 想像成一个变量: 始终指向静态方法的调用者

运行实例 »

点击 "运行实例" 按钮查看在线实例

 

实例

<?php
/**
 * 后期静态绑定的小案例
 *
 */
class Db1
{
    public static $pdo = null;
    //连接数据库
    public static function connect()
    {
        self::$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
    }

    public static function query()
    {
        $stmt = self::$pdo->prepare("SELECT `name`,`salary` FROM `staff` LIMIT 3");
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    public static function select()
    {
        self::connect();
//        return self::query();
        return static::query();
    }

}

class Db2 extends Db1
{
    public static function query()
    {
        $stmt = self::$pdo->prepare("SELECT `name` AS `姓名`,`email` AS `邮箱` FROM `user` LIMIT 3");
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}
echo '<pre>';
//print_r(Db1::select());
print_r(Db2::select());

运行实例 »

点击 "运行实例" 按钮查看在线实例

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学