扫码关注官方订阅号
本节课3分30说了,静态属性不可以在非静态方法中调用的,
但是亲测,本类中的非静态方法是可以调用静态属性的
使用【静态属性的self::属性名】就可以
首先非常感谢老师的回复
一、您给的示例代码里面 类没有定义 test() 这个方法 所以实例化会运行错误
echo (new Demo)->test(); // "Error"
二、我一直在用的是php7.2的版本练习东西
您给的代码中我把(new Demo)->test() 修改成(new Demo)->test2()运行
两个输出结果都是peter
是不是证明
类的【普通方法】 既可以调用【类的静态属性】又可以调用类的【静态方法】
首先, 感谢你的认真学习态度, 你说得对, 这个地方, 教程中有不严谨的地方...
实际上, 普通方法中,直接调用静态属性,并不会报错, 但是绝对不能调用静态方法,
在普通方法中, 官方也是不推荐使用静态成员的, 这里允许使用静态属性, 是一个历史遗留的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"
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
首先非常感谢老师的回复
一、您给的示例代码里面 类没有定义 test() 这个方法 所以实例化会运行错误
echo (new Demo)->test(); // "Error"
二、我一直在用的是php7.2的版本练习东西
您给的代码中我把(new Demo)->test() 修改成(new Demo)->test2()运行
两个输出结果都是peter
是不是证明
类的【普通方法】 既可以调用【类的静态属性】又可以调用类的【静态方法】
首先, 感谢你的认真学习态度, 你说得对, 这个地方, 教程中有不严谨的地方...
实际上, 普通方法中,直接调用静态属性,并不会报错, 但是绝对不能调用静态方法,
在普通方法中, 官方也是不推荐使用静态成员的, 这里允许使用静态属性, 是一个历史遗留的bug, 或许在以后的版本中会修正...
下面是测试代码,供您参考: