php如何:将会话变量保存为静态类变量

pay*_*ing 0 php session static session-variables

下面的代码工作正常:

<?php session_start();

   $_SESSION['color'] = 'blue'; 

   class utilities
   {
            public static $color;

        function display()
            {
                echo utilities::$color = $_SESSION['color'];
            }

   }
   utilities::display(); ?>
Run Code Online (Sandbox Code Playgroud)

这是我想要但不起作用:

<?php session_start();

$_SESSION['color'] = 'blue'; 

class utilities  {  
     public static $color = $_SESSION['color']; //see here

     function display()     
     {      
         echo utilities::$color;    
     }   } utilities::display(); ?>
Run Code Online (Sandbox Code Playgroud)

我收到此错误: Parse error: syntax error, unexpected T_VARIABLE in C:\Inetpub\vhosts\morsemfgco.com\httpdocs\secure2\scrap\class.php on line 7

Php不喜欢会话变量存储在函数之外.为什么?这是语法问题还是什么?我不想实例化对象,因为只是调用实用程序函数,我需要一些会话变量全局存储.init()每次运行函数时,我都不想调用函数来存储全局会话变量.解决方案?

H2O*_*H2O 5

在类中,您只能在方法中使用SESSION ...

实际上,如果你想在一个类中做某事,你必须在一个方法中编写代码......

一个类不是一个函数.它有一些变量 - 属性 - 和一些函数 - 作为方法 - 你可以定义变量,你可以初始化它们.但是你不能在方法之外对它们进行任何操作......例如

public static $var1; // OK!
public static $var2=5; //OK!
public static $var3=5+5; //ERROR
Run Code Online (Sandbox Code Playgroud)

如果你想像这样设置它们你必须使用构造函数...(但请记住:在创建对象之前不会调用构造函数...)

<?php 
session_start();

$_SESSION['color'] = 'blue'; 

class utilities  {  

    public static $color;

    function __construct()
    {
        $this->color=$_SESSION['color'];
    }

    function display()     
    {          
        echo utilities::$color;  
    }
}
utilities::display(); //empty output, because constructor wasn't invoked...
$obj=new utilities();
echo "<br>".$obj->color;
?>
Run Code Online (Sandbox Code Playgroud)