关于PHP静态方法调用和实例化类调用的区别
2016-08-02 12:17
423 查看
1.首先来澄清一些观点
由于静态方法在内存中只有一份,无论你调用多少次,都是共用的,而且没有对象的概念,所以不能在静态方法里面使用$this调用,如果非得调用的话,只能实例化自身类
而实例化不一样,每一个实例化是一个对象,在内存中是多个的
由于静态方法在内存中只有一份,无论你调用多少次,都是共用的,而且没有对象的概念,所以不能在静态方法里面使用$this调用,如果非得调用的话,只能实例化自身类
而实例化不一样,每一个实例化是一个对象,在内存中是多个的
<?php Error_reporting(E_ALL|E_STRICT); class A{ public function bar(){ echo 'bar'.PHP_EOL; } public static function foo(){ echo 'foo'.PHP_EOL; } } A::bar();//会报错 A::foo();//正确 $obj = new A(); $obj -> foo();//正确
/* bar()是一个非静态方法,应该由对象来调用,但用静态来调用此方法也可以执行,而严格状态下,此方法会执行,同时报错, Strict Standards: Non-static method Human::easyeat() should not be called statically in........ 但是实例化的类是可以调用静态方法的。 */
<?php class A{ public $name = 'zongshuai'; public function bar(){ echo 'bar'.PHP_EOL; } public static function foo(){ echo self::$name.PHP_EOL;//报错 } } A::foo(); /* 静态方法不能调用非静态属性 。不能使用self::调用非静态属性。 */
总结: 类》访问->静态方法(类的方法)->可以 类》访问->普通方法(对象的方法)->不可以(虽然方法里不用$this关键字时,可以!但不支持这种写法) 对象》访问》静态方法(类的方法)->可以 对象》访问》普通方法(对象的方法)->可以
相关文章推荐
- PHP调用静态方法实例化自己实现链式编程
- PHP中静态方法和实例化方法的区别
- 关于php静态方法间的调用
- 静态工厂方法月用new调用的构造方法的区别
- 关于如何判断网页是静态还是伪静态的方法——本文来自雅致生活网『www.yzsh0514.com』原帖地址:http://www.yzsh0514.com/bbs/viewthread.php?tid==0
- php中非静态方法的静态调用
- php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
- 看似简单的问题 静态方法和实例化方法的区别
- 静态方法和实例化方法的区别
- 静态方法和实例化方法的区别
- php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
- 静态方法和实例化方法的区别
- 关于php 当中静态方法 的使用方式
- 静态方法和实例化方法的区别
- 静态方法和实例化方法的区别
- 看似简单的问题 静态方法和实例化方法的区别
- 看似简单的问题 静态方法和实例化方法的区别
- 静态方法和实例化方法的区别
- 静态方法和实例化方法的区别
- python里关于类方法和静态方法的区别