类成员方法如何调用类成员属性和方法
2016-12-30 11:00
375 查看
类别 | 静态方法调用 | 非静态方法调用 |
---|---|---|
静态属性 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::调用时,系统会自动将这个方法转换为静态方法.
相关文章推荐
- 类成员方法如何调用类成员属性和方法
- 解析如何使用反射调用类型成员 方法,字段,属性
- 如何动态调用DLL中类的方法以及属性
- AS、Flex如何循环调用一个对象的属性、方法
- unity3d 一个c#类如何调用另一个c#类中的属性和方法
- CLR如何调用虚方法、属性和事件
- 通过反射,如何操作私有成员变量(取/赋值),如何调用私有方法?
- 如何动态调用DLL中类的方法以及属性
- 使用反射依导航路径调用对象成员方法,或返回对象子、孙属性或字段成员[转]
- JavaScript:如何获得 Private、Privileged、Public 和 Static 成员(属性和方法)【翻译+整理】
- 如何调用IDispatch接口的方法和属性
- 如何动态调用DLL中类的方法以及属性
- 如何动态调用DLL中类的方法以及属性
- Asp.net 2.0 中如何调用用户控件(UserControl)的相关方法或属性/如何传参等
- CLR如何调用虚方法、属性和事件
- Asp.net 如何取母版页的属性及控件及方法调用
- 子页如何调用母版页方法和属性
- Android如何生成公共属性的get,set方法时,去除 成员变量的m前缀
- Java中,如何调用“其他类的方法中生成的实例化的对象”的属性?
- 如何动态调用DLL中类的方法以及属性