【问题标题】:php how to: save session variable into a static class variablephp 如何:将会话变量保存到静态类变量中
【发布时间】:2010-12-06 08:45:20
【问题描述】:

下面的代码可以正常工作:

<?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() 函数来存储全局会话变量。解决方案?

【问题讨论】:

    标签: php session static session-variables


    【解决方案1】:

    来自PHP manual:-

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

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

    <?php
    
    class utilities {
    public static $color = $_SESSION['color']; //see here
    
     function display()   
     {      
         echo $_SESSION['color'];  
     }
    }
    
    utilities::display(); ?>
    

    【讨论】:

    • 啊拍摄,我在想什么我不需要将它们存储在课堂的任何地方,因为我可以在任何时候在任何地方访问它们而无需这样做。愚蠢的错误......太多的编码让我过度思考我认为的简单问题。感谢您提请我注意。
    【解决方案2】:

    在一个类中,你只能在方法中使用 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;
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-08
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多