发布网友 发布时间:2022-04-28 08:43
共7个回答
懂视网 时间:2022-04-28 13:04
静态方法只有一个,无论你调用多少次,都是共用的,是没有对象的概念,因此不能在静态方法里面使用$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 = 'kangbazi'; public function bar(){ echo 'bar'.PHP_EOL; } public static function foo(){ echo self::$name.PHP_EOL;//报错 } } A::foo(); /* 静态方法不能调用非静态属性 。不能使用self::调用非静态属性。 */
做一个小总结:
最大的区别在于内存。
静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,
所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。
任何语言都是对内存和磁盘的操作,至于是否面向对象,只是软件层的问题,底层都是一样的,只是实现方法不同。
静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快,
而且静态内存是有限制的,太多了程序会启动不了。
推荐教程:《php教程》
热心网友 时间:2022-04-28 10:12
关于静态方法和实例方法的一些误区。热心网友 时间:2022-04-28 11:30
静态方法是通过类名直接访问,实例方法是通过类的实例访问热心网友 时间:2022-04-28 13:05
我觉得这个应该是很随意的事情,软件开发,程序编写都是很随意的事情,没有什么太大的区别,基本上根据个人喜好.如果都按步就班的话,也就没有什么创造了,你的水平也永远提高不了.热心网友 时间:2022-04-28 14:56
怎么感觉楼上的回答没有说出精髓啊..热心网友 时间:2022-04-28 17:04
静态是类的,实例是对象的.oo的观点就是静态成员就是类所有对象所具备的特点,而实例成员是每个对象自有的实现,是不一样的.比如说每个人都有头发,眼睛,耳朵,名字,性别,年龄,身高等等.这些都是静态的,但是每个人的这些属性是不一样的,这些不同的属性就是实例化.所以也可以说静态方法不需要依赖类当中的属性,静态方法本身就可以封闭的完成一个功能,而实例的方法更多会用到类中的属性.热心网友 时间:2022-04-28 19:29
有时候,静态的方法可以直接调用,而实例方法需要用到new;