2009-10-13 3 views
0

Ниже код работает отлично:PHP, как: сохранить переменную сеанса в статический класс переменной

<?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() для хранения глобальных переменных сеанса каждый раз, когда я запускаю функцию. Решения?

ответ

3

От PHP manual: -

Like any other PHP static variable, static properties may only be initialized using a literal or constant; expressions are not allowed. So while you may initialize a static property to an integer or array (for instance), you may not initialize it to another variable, to a function return value, or to an object.

Вы говорите, что вам нужны ваши переменные сессии будут сохранены в глобальном масштабе? Они $_SESSION то, что известно как "super global"

<?php 

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

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

utilities::display(); ?> 
+0

ааа стрелять, о чем я думаю мне не нужно хранить их где-нибудь в классе, потому что я могу получить доступ к ним в любом месте в любой момент и без этого. Глупая ошибка ... К большому количеству кодировок я заставляю меня перепробовать простые проблемы, я полагаю. Спасибо, что привлек это к моему вниманию. – payling

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; 
?> 
Смежные вопросы