我应该避免在 PHP 中使用太多静态方法吗?
Should I avoid using too many static methods in PHP?
众所周知,静态方法可以在不实例化class的情况下被调用。所以我想知道静态方法是否会在我使用它们之前加载到内存中。如果那样的话,在我看来,我应该使用更多的实例方法而不是太多的静态方法。有人建议吗?我不熟悉 PHP.
的底层机制
So I wonder if static methods will be loaded into memory before I use them.
加载 class 时,始终会加载其所有方法。无论这些方法是 class 方法还是实例方法,或者它们是否被应用程序使用,都会发生这种情况。
使用最适合您的设计的任何类型的方法。
静态方法只是一个具有奇特名称的常规函数(如果不是 public
,则访问受限)。
静态方法不是 OOP,它们是变相的过程代码。
Should I avoid using too many static methods in PHP?
这取决于你认为有多少"too many"。对于纯 OOP 代码,一个静态方法已经是 "too many"。但有时不可避免(阅读"easier")为某些功能编写静态方法。
So I wonder if static methods will be loaded into memory before I use them.
无论您是 运行 使用 CLI 的 PHP 脚本还是通过 Web 服务器调用它来提供网页,脚本的文本都会加载到内存中并进行编译。如果编译成功(即没有语法错误),解释器开始执行它。
此时脚本中定义的所有内容都已在内存中,但只有主脚本中定义的项目。编译阶段不处理包含语句 (include
, include_once
, require
, require_once
)。
include
语句引用的文件被加载到内存中,编译和执行时 并且如果 ,include
语句在 include
语句期间到达脚本的执行。包含文件的全部内容被加载、解析并转换为操作码,无论它是否包含函数、类 或全局代码。从这个角度看,实例方法和静态方法没有区别。
I should use more intance methods instead of too many static methods.
Anyone advice?
有时候你需要定义一个静态方法,如果你需要在不创建该方法的对象的情况下调用它class,但这应该是有限的。
何时使用静态方法:
您可以使用静态方法作为工厂,根据上下文创建对象或与其他实例共享资源。
如果与您的目的和实例无关
如果您打算使用 public 静态属性,我建议在某些情况下使用 CONST
,除非您不想更改其值。
为什么?
常量位于 class 和对象范围内,并且它始终不可变(您无法更改其值)并且可以安全使用。
静态属性不在对象范围内,而是在 class 范围内及其可变(可以更改)并且使用起来不安全。
或者您可以查看 Singleton pattern 以了解如何在资源共享上使用静态方法。
众所周知,静态方法可以在不实例化class的情况下被调用。所以我想知道静态方法是否会在我使用它们之前加载到内存中。如果那样的话,在我看来,我应该使用更多的实例方法而不是太多的静态方法。有人建议吗?我不熟悉 PHP.
的底层机制So I wonder if static methods will be loaded into memory before I use them.
加载 class 时,始终会加载其所有方法。无论这些方法是 class 方法还是实例方法,或者它们是否被应用程序使用,都会发生这种情况。
使用最适合您的设计的任何类型的方法。
静态方法只是一个具有奇特名称的常规函数(如果不是 public
,则访问受限)。
静态方法不是 OOP,它们是变相的过程代码。
Should I avoid using too many static methods in PHP?
这取决于你认为有多少"too many"。对于纯 OOP 代码,一个静态方法已经是 "too many"。但有时不可避免(阅读"easier")为某些功能编写静态方法。
So I wonder if static methods will be loaded into memory before I use them.
无论您是 运行 使用 CLI 的 PHP 脚本还是通过 Web 服务器调用它来提供网页,脚本的文本都会加载到内存中并进行编译。如果编译成功(即没有语法错误),解释器开始执行它。
此时脚本中定义的所有内容都已在内存中,但只有主脚本中定义的项目。编译阶段不处理包含语句 (include
, include_once
, require
, require_once
)。
include
语句引用的文件被加载到内存中,编译和执行时 并且如果 ,include
语句在 include
语句期间到达脚本的执行。包含文件的全部内容被加载、解析并转换为操作码,无论它是否包含函数、类 或全局代码。从这个角度看,实例方法和静态方法没有区别。
I should use more intance methods instead of too many static methods. Anyone advice?
有时候你需要定义一个静态方法,如果你需要在不创建该方法的对象的情况下调用它class,但这应该是有限的。
何时使用静态方法:
您可以使用静态方法作为工厂,根据上下文创建对象或与其他实例共享资源。
如果与您的目的和实例无关
如果您打算使用 public 静态属性,我建议在某些情况下使用 CONST
,除非您不想更改其值。
为什么?
常量位于 class 和对象范围内,并且它始终不可变(您无法更改其值)并且可以安全使用。
静态属性不在对象范围内,而是在 class 范围内及其可变(可以更改)并且使用起来不安全。
或者您可以查看 Singleton pattern 以了解如何在资源共享上使用静态方法。