搜索

首页  >  问答  >  正文

静态属性是可以在非静态方法中调用的

本节课3分30说了,静态属性不可以在非静态方法中调用的,

但是亲测,本类中的非静态方法是可以调用静态属性的

使用【静态属性的self::属性名】就可以

God_LikeGod_Like2052 天前2196

全部回复(3)我来回复

  • God_Like

    God_Like2019-04-15 17:18:21

    首先非常感谢老师的回复

    一、您给的示例代码里面  类没有定义 test() 这个方法 所以实例化会运行错误

    echo (new Demo)->test();    // "Error" 

    二、我一直在用的是php7.2的版本练习东西

    您给的代码中我把(new Demo)->test() 修改成(new Demo)->test2()运行

    两个输出结果都是peter

    是不是证明

    类的【普通方法】 既可以调用【类的静态属性】又可以调用类的【静态方法】

    回复
    0
  • 天蓬老师

    天蓬老师2019-04-14 22:23:30

    首先, 感谢你的认真学习态度, 你说得对, 这个地方, 教程中有不严谨的地方...

    实际上, 普通方法中,直接调用静态属性,并不会报错, 但是绝对不能调用静态方法, 

    在普通方法中, 官方也是不推荐使用静态成员的, 这里允许使用静态属性, 是一个历史遗留的bug, 或许在以后的版本中会修正...

    下面是测试代码,供您参考:

    class Demo
    {
        // 静态属性
        public static $name = 'peter';
        
        // 静态方法
        public static function hello()
        {
           return self::$name;
        }
        
        //  普通方法1
        public function test1()
        {
            return self::$name;
        }
        
        //  普通方法1
        public function test2()
        {
            return self::hello();
        }
    }
    
    echo (new Demo)->test1();    // "peter"
    echo '<hr>';
    echo (new Demo)->test();    // "Error"


    回复
    1
  • 取消回复