2009-10-13 4 views
0

Ci-dessous le code fonctionne très bien:php comment: sauver variable de session dans une classe variable statique

<?php session_start(); 

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

    class utilities 
    { 
      public static $color; 

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

    } 
    utilities::display(); ?> 

Ce que je veux, mais ne fonctionne pas:

<?php session_start(); 

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

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

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

Je reçois cette erreur: Php n'aime pas que les variables de session soient stockées en dehors des fonctions. Pourquoi? Est-ce un problème de syntaxe ou quoi? Je ne veux pas avoir à instancier des objets car pour appeler simplement des fonctions utilitaires et j'ai besoin de quelques variables de session à stocker globalement. Je ne veux pas appeler une fonction init() pour stocker les variables de session globales chaque fois que j'exécute une fonction. Solutions?

Répondre

3

De l'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.

Vous dites que vous avez besoin de vos variables de session pour être stockés à l'échelle mondiale? Ils sont $_SESSION est ce qu'on appelle un "super global"

<?php 

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

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

utilities::display(); ?> 
+0

shoot ahh, ce que je pense que je ne ai pas besoin de les stocker partout dans la classe parce que je peux y accéder partout à l'intérieur à tout moment, sans le faire. Erreur idiote ... Trop de codage me fait penser à des problèmes simples, je suppose. Merci d'avoir porté cela à mon attention. – payling

5

Dans une classe, vous pouvez utiliser uniquement des méthodes SESSION ...

En fait, si vous voulez faire quelque chose dans une classe, vous devez coder dans une méthode ...

Une classe n'est pas une fonction. Il a quelques variables - comme attributs - et certaines fonctions - comme méthode - Vous pouvez définir des variables, vous pouvez les initialiser. Mais vous ne pouvez pas faire une opération sur eux en dehors d'une méthode ... par exemple

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

Si vous voulez les mettre comme cela, vous devez utiliser le constructeur ... (mais rappelez-vous: les constructeurs ne sont pas appelé jusqu'à ce que l'objet est créé ...)

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