PHP как: сохранить переменную сеанса в статическую переменную класса - PullRequest
0 голосов
/ 13 октября 2009

Ниже код отлично работает:

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

5 голосов
/ 13 октября 2009

В классе вы можете использовать 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;
?>
3 голосов
/ 13 октября 2009

Из руководства по PHP : -

Как и любая другая статическая переменная PHP, статические свойства могут быть только инициализируется с использованием литерала или постоянная; выражения не допускаются. Так что пока вы можете инициализировать статический свойство к целому числу или массиву (для экземпляр), вы не можете инициализировать его в другую переменную, в функцию возвращаемое значение или объекту.

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

<?php

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

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

utilities::display(); ?>
...