0

下面的代码工作正常:

<?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()每次运行一个函数时都调用一个函数来存储全局会话变量。解决方案?

4

2 回答 2

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;
?>
于 2009-10-13T15:56:56.973 回答
3

来自PHP 手册:-

与任何其他 PHP 静态变量一样,静态属性只能使用文字或常量进行初始化;不允许表达。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您不能将其初始化为另一个变量、函数返回值或对象。

您说您需要全局存储会话变量?他们$_SESSION是所谓的“超级全球”

<?php

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

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

utilities::display(); ?>
于 2009-10-13T15:30:47.260 回答