网站首页日记详情

php静态方法和实例化方法

徒步认知2020/06/29111人围观
程序  
简介php静态方法和实例化方法,也就是静态调用和对象调用,不过现在不是都提倡对象调用吗,我业务逻辑大多数都是使用静态,数据操作使用得对象调用。

1 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化)

2 静态方法:需要在项目启动的时候就初始化,在不创建对象的情况下,这种代码是被动执行的(静态方法在类加载的时候就已经加载 可以用类名直接调用)。

两者的区别是:静态代码块是自动执行的,

静态方法是被调用的时候才执行的.

静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次;

非静态代码块,在创建对象的时候(即new一个对象的时候)执行,每次创建对象都会执行一次

不创建类执行静态方法并不会导致静态代码块或非静态代码块的执行。

 

 

静态调用的action,__construct不生效

 

一个生命周期,也就是一次请求

不过静态方法多了,可能运行不起来


PHP静态方法和实例化方法的区别

区别点

静态方法(static)

实例方法

调用

类名::方法名

如:

    User::find();

 

需要new

如:

    $userObj = new User;

    $userObj->find();

存储

在内存中只有一份,在一个php生命周期内,资源共享。

注意:静态方法,属性随着类的加载而加载,所以过多的静态方法会消耗更多的内存。

每new一次,会开辟一份独立的空间,即在内存中会存在多份的情况。

性能

直接调用,不需要开辟空间等操作,时间上和效率上更胜一筹

需要一些时间进行开辟空间等操作

共享

共享同一个空间,同一份数据,所以某些场景下更适合静态方法

多个实例不共享同一空间和数据

链式写法

不支持

支持。如:

    $userOjb->fields('uid')->where('uid>0')->find();