我什么时候在php中使用静态变量/函数?
我正在用PHP刷新OOP,我看到了一个将函数和/或变量设置为静态的示例。何时以及为何将变量/函数设置为静态?我做过其他语言,并不记得曾经使用过静态,我从来没有找到它的真正目的。我知道它的作用,但为什么不直接使用变量呢?
我正在用PHP刷新OOP,我看到了一个将函数和/或变量设置为静态的示例。何时以及为何将变量/函数设置为静态?我做过其他语言,并不记得曾经使用过静态,我从来没有找到它的真正目的。我知道它的作用,但为什么不直接使用变量呢?
当您要使用未绑定到实例的方法/变量时,请使用静态。这可能发生在以下情况下:
这与你的目的和实例没有关系(对于不允许像Java这样的其他任何OOP的语言的工具箱很有用,但在PHP中没有用)。
您希望控制对实例的访问。大多数情况下,要处理的实例不是在编写代码时定义的,而是在执行时定义的。单例模式就是最好的例子。您可以使用静态方法作为工厂,根据上下文创建对象或与其他实例共享资源。例如:静态成员可以授予对数据库层的访问权限,因此应用程序的一部分从任何地方访问相同的基础层,并且打开/关闭它而不会发生冲突。
表演很重要,方法会执行很多次。在这种情况下,您将节省一些 CPU 时间,防止解释器在每次调用时将成员查找到实例。但是,如果性能成为您找到此解决方案的问题,那么可能是时候重新考虑您的体系结构,或者对代码的关键部分使用绑定到更快的语言。
您有一个与某个类型相关但将应用于另一个类型的方法。将方法写入第一种类型的声明中是有意义的,但将其设置为静态,因为它需要另一种类型的实例。
完美的例子是字符串解析器:
class MyObject
{
static function parse($str)
{
$obj = new MyObject();
// some parsing/setting happens here
return $obj;
}
}
// you create an object "MyObject" from a string, so it's more obvious
// to read it this way :
$new_obj = MyObject::parse("This a description of a super cool object");
静态函数和变量用于访问全局范围内的变量/函数,如下所示:
echo myClass::myVariable;
echo myClass::myFunction();
当某些内容是静态的时,它可以在任何地方访问,并且与过程类型函数非常相似,除了它可以使用self并且包含在类作用域中。
class myClass{
static $myVariable = "myVar";
static function myFunction()
{
return "myFunc";
}
}
使用此方法的方法之一是仅保留类的一个实例或单例方法。
class myClass
{
static $class = false;
static function get_connection()
{
if(self::$class == false)
{
self::$class = new myClass;
}
else
{
return self::$class;
}
}
private function __construct()
{
// my constructor
}
// Then create regular class functions.
}
因为它有一个私有构造函数,所以它不能用运算符实例化,所以你被迫调用来获取一个类。该函数可以创建新类(因为它是该类的成员)。然后,它将该类存储在静态变量中,如果再次调用该函数,它将仅返回创建的类。new
myClass::get_connection()
最后,static关键字用于保持事物,嗯,静态,参考范围。这意味着您不希望由于当前范围而发生任何“更改”。虽然 Singleton 方法稍微扩展了这一点,但它始终遵循相同的想法,即您始终拥有“相同”的类,无论您处于什么范围内。
StackOverflow 知识
如何避免使用 PHP 全局对象
在 PHP 中的函数之间共享变量 而不使用全局
使全局变量对于类
中的每个函数都可访问 对于数据库连接
PHP 类的全局全局或单例 PHP 类:何时使用 :: vs. -> ?