PHP使用静态方法和动态方法,在效率和资源上有何区别?

baidu_34196164 2016-08-07 05:31:35
写程序的时候, 很多核心类, 使用动态方法 还是静态方法,让我疑虑;
比如;
class A{
public static $a;
public fucntion aaa() {
return self::$a;
}
}
class B{
public $a;
public fucntion aaa() {
return $this->a;
}
}
A 和 B 类, 请问效率上有差别吗?
不明白 实例化 具体浪费了什么资源?
A::aaa() 和 (new B())->aaa() ; 使用一样的内存吗?
--------------------
关于功能上, 所有动态类都可以写成静态的: (把成员属性添加标识存到静态属性中, 把__construct每个方法都写上...),就是繁琐点;

目前在写框架, 不懂实例化和非实例化在资源上的具体差别在哪里?
求本质,thanks.

...全文
868 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
晓风残月淡 2019-08-11
  • 打赏
  • 举报
回复
本质是,无论静态方法还是动态方法,都是存在程序代码区被所有对象共用,对象只拥有属性和类指针。
成员:
静态成员属于类,被所有对象所共用。存在静态存储区,整个程序运行都存在,占内存。
非静态成员属于各个对象,各个对象都拥有一份拷贝。存在动态存储区,对象调用过后自动销毁。
方法
静态方法只能访问静态成员。
动态方法隐含this指针,调用时需要实例化对象传递指针给方法。动态方法既可以访问静态成员,又可以访问非静态成员。因为传递指针,比静态方法多一步,稍慢。
A 和 B 类, 请问效率上有差别吗?
不明白 实例化 具体浪费了什么资源?
A::aaa() 和 (new B())->aaa() ; 使用一样的内存吗? 关于功能上, 所有动态类都可以写成静态的: (把成员属性添加标识存到静态属性中, 把__construct每个方法都写上...),就是繁琐点;


1.根据你的问题,你这个功能是想访问$a。B类要实例化,要给对象开辟内存空间,实际上是访问类B的对象的一份拷贝。效率上,不如去访问类A的静态成员属性$a。
2.所有动态类的确可以写成静态类,但是成员属性到底想被所有对象共用,还是各个对象各自拥有,是要根据自己的需求而定的。

  • 打赏
  • 举报
回复
虽然不知道具体差别在哪儿,但是我感觉使用非静态方法多了实例化的过程,还要分配内存来存放对象,如果条件允许,肯定还是静态的好一些
Leslie丶 2016-08-10
  • 打赏
  • 举报
回复
静态用完了不会销毁啊,占内存呗。
下雨的声音丶 2016-08-08
  • 打赏
  • 举报
回复
分别测试一下执行时间就知道了啊
傲雪星枫 2016-08-07
  • 打赏
  • 举报
回复
没有区别。看需求场景不同使用不同的。
xuzuning 2016-08-07
  • 打赏
  • 举报
回复
静态方法和动态方法,在效率和资源上 没有 任何区别 静态方法 只是些受到范围约束的函数而已

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧