在此上下文中使用什么更好,静态方法或简单的公共方法,并且总是这样调用它们:$ request = new Request(); if($ request-> isPostRequest()){do smth} 当然它更容易使用静态,但更适合使用什么?
Class Request {
public static function isSecureConnection() {}
public static function isPostRequest() {}
public static function isAjaxRequest() {}
...etc
}
答案 0 :(得分:6)
如果每个Request
都是真正的实体,那么最好使用非静态成员。但是如果它不是并且通常使用方法,比如数学中的Sinus函数,那么它们最好是静态的。
总的来说,在一个只包含函数而没有数据成员的类中声明静态函数会更好。
答案 1 :(得分:1)
您应该始终创建一个类,如果要在非静态环境中使用它。
然后你可以将它用作具有延迟实例化的Singleton。或者甚至作为静态类实例化。或者甚至作为独立实例对象。您稍后决定如何处理它。
如果您首先将所有成员声明为静态,那么基本上只是在一个名为Class的美化命名空间中覆盖一堆全局变量。即使您没有调用它或在代码中使用它,您也将静态分配该类使用的内存。
所以,只要写成一个类,然后你决定如何处理它。静态/非静态。辛格尔顿/实例。工厂模式与否。内存分配器X / DLL绑定或诸如此类。
唯一的例外是用于代表对象实例进行簿记的静态成员;像引用计数,缓存和类似的东西。这是关于静态/非静态的好事,你可以混合搭配一些聪明的行为。
如果您以后想要其他请求怎么办?或者如果因为您处于多线程环境中而可以创建多个会发生什么?一旦你用静力学走这条路,事情会变得非常奇怪。
答案 2 :(得分:1)
看起来您正在处理一个特定请求。
现在这暗示你应该把它变成一个单身,和/或使用静态函数。
原因:
只有一个请求,所有状态都由传递给进程的环境定义。类方法只是辅助函数,并且您希望能够在没有类实例的情况下使用它们。
另一方面,你很少会使用静态函数和代表其中一个的类,例如一个用户,一个多个问题。
答案 3 :(得分:0)
将类属性或方法声明为静态使它们可以访问,而无需实例化类。声明为static的属性无法使用实例化的类对象访问(尽管静态方法可以)。
<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // As of PHP 5.3.0
?>
请参阅Static Keyword from php.net的参考资料。
答案 4 :(得分:0)
如果可以,请使用静态方法作为默认方法。静态方法比非静态方法运行得更快。