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

时间:2009-10-13 15:20:40

标签: 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(); ?>

这是我想要的但不起作用:

<?php session_start();

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

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

     function display()     
     {      
         echo utilities::$color;    
     }   } utilities::display(); ?>

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

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

2 个答案:

答案 0 :(得分:5)

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

实际上,如果你想在课堂上做某事,你必须用方法编写代码......

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

public static $var1; // OK!
public static $var2=5; //OK!
public static $var3=5+5; //ERROR

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

<?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;
?>

答案 1 :(得分:3)

来自PHP manual: -

  

与任何其他PHP静态变量一样,   静态属性可能只是   使用文字或文字初始化   不变;表达式是不允许的。   所以你可以初始化静态   属性为整数或数组(for   例如),你可能不会初始化它   另一个变量,一个函数   返回值,或对象。

您说您需要将会话变量全局存储吗?他们是$_SESSION,即所谓的"super global"

<?php

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

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

utilities::display(); ?>