类成员方法如何调用类成员属性和方法

类别 静态方法调用 非静态方法调用
静态属性 static $name = 'xiaoming' self::$name self::$name
非静态属性$name = 'xiaoming' 不能,报Fatal error,不能使用self::调用非静态属性,也不能使用$this 获取非静态属性的值 $this->name
静态方法public static function say() self::say() self::say()
非静态方法public function say() php5中,不能使用$this调用非静态方法,但是可以使用self::调用 $this->say()
  • 可以用::调用非静态方法吗?

答:可以,代码照常运行
只是提示Strict Standards: Non-static method Stu::say() should not be called statically in D:\phpStudy2014\WWW\oop\day1\test.php on line 19
当然这里也是有前提的,这个非静态方法中不能调用类成员属性.

  • 类名可以用对象访问符->调用静态方法吗?

不可以,报错

  • 一个对象如何调用类成员静态方法?

方法①用->符号调用,方法②用::符号调用.

  • 一个对象如何调用类成员非静态方法?

方法①用->符号调用
方法②用::符号调用,程序正常运行,但是提示
Strict Standards: Non-static method Stu::say() should not be called statically in D:\phpStudy2014\WWW\oop\day1\test.php on line 21

  • 静态属性跟非静态属性的区别?

非静态属性只有在类实例化对象的那一刻才在内存中开辟空间.这也就是非静态属性不需要实例化就可以调用的原因.
静态属性则在类被加载的那一刻,即使没有被实例化,也会被内存分配空间,而且即使内存中有多个实例化对象,静态属性也只有一份.

静态方法跟非静态方法的区别同上.

  • 静态方法调用非静态属性

不能,报Fatal error
Fatal error: Access to undeclared static property: Stu::$name in D:\phpStudy2014\WWW\oop\day1\test.php on line 15
不能使用self::调用非静态属性

也不能用$this->,否则报错,Fatal error: Using $this when not in object context in D:\phpStudy2014\WWW\oop\day1\test.php on line 15

  • 静态方法中不能使用$this关键字

因为静态方法在加载的过程中,内存就给其分配了空间,所以它不属于任一对象.
故有以下报错
Fatal error: Using $this when not in object context in D:\phpStudy2014\WWW\oop\day1\test.php on line 15

  • 为什么静态方法中可以用self::调用非静态方法?

当一个类中有非静态方法被self::调用时,系统会自动将这个方法转换为静态方法.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,854评论 18 139
  • 一. Java基础部分.................................................
    wy_sure阅读 3,832评论 0 11
  • //Clojure入门教程: Clojure – Functional Programming for the J...
    葡萄喃喃呓语阅读 3,730评论 0 7
  • 八月,炎热干燥的空气里弥漫着潮湿的气息,随着燥热的天气外界的环境变得极不宁静,而内心声深处却是风淡云轻。 ...
    a0b0b3fad1e0阅读 340评论 1 0