Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中静态方法的生命周期_Php - Fatal编程技术网

PHP中静态方法的生命周期

PHP中静态方法的生命周期,php,Php,我有一个实现数组属性的类。我想在该属性中设置几个对象。它将在请求流中多次执行,因此声明为静态。而且这不是一个单身班 当我第二次向该类添加内容时,该类中的属性是否会保留其早期值? (如果有任何变化,则通过静态方法进行添加) 例如: /* file1.php */ Foo::add('value1'); include 'file2.php'; /* file2.php */ ... Foo::add('value2'); 这是Foo的定义: class Foo { public stat

我有一个实现数组属性的类。我想在该属性中设置几个对象。它将在请求流中多次执行,因此声明为静态。而且这不是一个单身班

当我第二次向该类添加内容时,该类中的属性是否会保留其早期值? (如果有任何变化,则通过静态方法进行添加)

例如:

/* file1.php */
Foo::add('value1');
include 'file2.php';

/* file2.php */
...
Foo::add('value2');
这是
Foo
的定义:

class Foo {
   public static $bar = [];
   public static function add($value)
   {
      Foo::$bar[] = $value;
   }
}
这是一种好的做法吗?单身汉在这里更好吗?有没有其他办法来解决这个问题?

是的。
include()
require()
语句实质上是将引用文件的内容转储到语句的位置。你可以把它看作是一个脚本

您可以通过添加
var\u dump(Foo::bar)来测试您的问题到脚本末尾


只有当您只希望类实例化/初始化一次时,才真正需要使用单例模式。如果您希望在脚本中有额外的实例,那么您将希望将其作为一个普通类,并开始研究如何执行所需的操作。ie:。

在调用静态方法之前需要声明类,因此file2不是正确的位置:)是的,它将保留该值。然而,这两种方法和单例都只是表示全局变量的奇特方式,全局变量在OOP中从未被认为是一种好的实践。我知道这一点,但是……否则我如何在没有静态变量的情况下在类中保存一些信息呢?更不用说这些东西的美丽了。