dmz社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1333|回复: 0

[php知识] php中static self区别与总结

[复制链接]
  • TA的每日心情

    2024-11-19 20:46
  • 签到天数: 244 天

    [LV.8]以坛为家I

    4434

    主题

    1459

    帖子

    1万

    积分

    会|员

    Rank: 9Rank: 9Rank: 9

    积分
    10839
    发表于 2019-10-28 09:00:01 | 显示全部楼层 |阅读模式

    本站资源全部免费,回复即可查看下载地址!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    [PHP] 纯文本查看 复制代码
    <?php
    
    /**
     * static self 区别与总结
     * 总结:
     *  1.在 PHP 里,在没有继承时候,你用self::class 和 static::class是一样的,都是获取当前类名。
     *  2.如果用到了继承,并且这个方法写在了父类里,你想要分别获取当前父类名和未知的子类名,就要按照下面的方法进行获取。
     *  在 PHP 类中,self指向的是当前方法存在的这个类,也就是父类。static指向的是最终那个子类。
     *
     *  1.在一个类A中,self::who() 等同于 static::who()
     *  2.当子类B继承父类A,子类B::test(),调用的时候,区别:
     *      test()方法调用 self::who() 调用父类的who()方法
     *      test()方法调用 static::who()调用的是子类的who()方法
     */
    
    /**
     * Class A
     * 1.在同一个类中使用 self static 获取的都是获取当前类名
     */
    class A
    {
        public static function who()
        {
            echo __CLASS__;
        }
    
        public static function test()
        {
            self::who();   echo '<br>';   // A
            static::who(); echo '<br>';   // A
        }
    }
    
    A::test(); echo '<br>'; // A A
    
    /**
     * class B extends A
     *   B::test();
     *   self::who();  调用 A 父类  的 who 方法
     *   static::who(); 调用子类 B 的 who 方法
     */
    class B extends A
    {
        public static function who()
        {
            echo __CLASS__;
        }
    }
    
    echo B::test(); echo '<br>'; // A B
    
    /**
     * 父类P中 获取子类C的类名
     */
    class P
    {
        public static function getParent()
        {
            return self::class;
        }
    
        public static function getChild()
        {
            return static::class;
        }
    }
    
    class C extends P
    {
    
    }
    
    echo C::getParent();         // P
    echo C::getChild(), PHP_EOL; // C
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|本站代理|dmz社区

    GMT+8, 2025-2-2 05:50 , Processed in 0.186635 second(s), 29 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表