Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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_Static Members - Fatal编程技术网

PHP中静态属性的行为

PHP中静态属性的行为,php,static-members,Php,Static Members,我试图了解静态属性是如何工作的。我的示例: class Model_Cart{ static public $_a; } 我用不同的脚本创建了这个类的对象。脚本1: Model_Cart::$_a = true; var_dump(Model_Cart::$_a); 输出为“真” 但如果我在以下步骤之后执行第二个脚本: var_dump(Model_Cart::$_a) 输出为空 我希望静态变量在类的所有实例中共享。您能解释一下这种行为吗?您不能在请求之间共享变量-它们需要通过

我试图了解静态属性是如何工作的。我的示例:

class Model_Cart{
    static public $_a;
}
我用不同的脚本创建了这个类的对象。脚本1:

 Model_Cart::$_a = true;
 var_dump(Model_Cart::$_a);
输出为“真”

但如果我在以下步骤之后执行第二个脚本:

var_dump(Model_Cart::$_a)
输出为空


我希望静态变量在类的所有实例中共享。您能解释一下这种行为吗?

您不能在请求之间共享变量-它们需要通过
POST
GET
请求发送。

这种行为实际上与预期的一样。请注意,如果不使用会话、cookie或某种数据库,您无法在请求之间共享属性或值。这是因为http是一种所谓的“无状态协议”,这几乎意味着每次请求都会从头开始构建应用程序

请注意以下示例:

script\u number\u one.php

$my_var = 'hello world!';
echo $my_var; // does what you think it does
echo $my_var; // echoes nothing, or raises a warning that the var doesn't exist
script\u number\u two.php

$my_var = 'hello world!';
echo $my_var; // does what you think it does
echo $my_var; // echoes nothing, or raises a warning that the var doesn't exist
正如您所看到的,您在脚本一中做什么并不重要,因为脚本二只是不知道no 1(实际上也不关心)

你们班的情况也差不多。但是你可以做些别的事情,这可能是你所期望的:

class myStaticClass {
    public static $static_var = 'Hello world!';

    public function alter_static_value($new_value) {
        self::$static_var = $new_value;
    }

}

$_obj_1 = new myStaticClass;
$_obj_2 = new myStaticClass;

echo $_obj_1::$static_var; // echoes 'Hello World!'
echo $_obj_2::$static_var; // also echoes 'Hello world!'

$_obj_1->alter_static_value('Bye world!');
echo $_obj_2::$static_var; // echoes 'Bye world!';
如您所见,静态值对于对象实例不是特定的,但对于整个类是特定的,因此对于实例化该特定类的所有对象都是可访问的


希望这能有所帮助。

var\u转储之前,您正在执行什么脚本?您是否在另一个请求中运行第二个脚本?因为变量不在请求之间共享:)仅供参考,您没有任何对象或类实例。@Shamil在var_dump之前我没有执行任何操作。这只是测试scripts@Tamara这就是你的答案,你不能在请求之间共享变量。虽然可以使用
s\u会话
,使用
$\u SESSION
存储某些东西并不理想。虽然这个类是title
Cart
,但我不能说使用
$\u SESSION