写程序的时候, 很多核心类, 使用动态方法 还是静态方法,让我疑虑;
比如;
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.
比如;
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.
成员:
静态成员属于类,被所有对象所共用。存在静态存储区,整个程序运行都存在,占内存。
非静态成员属于各个对象,各个对象都拥有一份拷贝。存在动态存储区,对象调用过后自动销毁。
方法
静态方法只能访问静态成员。
动态方法隐含this指针,调用时需要实例化对象传递指针给方法。动态方法既可以访问静态成员,又可以访问非静态成员。因为传递指针,比静态方法多一步,稍慢。
A 和 B 类, 请问效率上有差别吗?
不明白 实例化 具体浪费了什么资源?
A::aaa() 和 (new B())->aaa() ; 使用一样的内存吗? 关于功能上, 所有动态类都可以写成静态的: (把成员属性添加标识存到静态属性中, 把__construct每个方法都写上...),就是繁琐点;1.根据你的问题,你这个功能是想访问$a。B类要实例化,要给对象开辟内存空间,实际上是访问类B的对象的一份拷贝。效率上,不如去访问类A的静态成员属性$a。
2.所有动态类的确可以写成静态类,但是成员属性到底想被所有对象共用,还是各个对象各自拥有,是要根据自己的需求而定的。