2010-01-29 6 views
1

J'ai un problème concernant l'affectation de la variable de session à la variable de classe pendant l'initialisation de la variable de classe.Assigner la variable de session à la variable de classe pendant l'initialisation de la variable de classe dans PHP

Vérifiez mon code ci-dessous

<?php 
class ModifyProfile 
{ 
    var $userType=$_SESSION['wb_user_type']; 

    var $tablename=WB_CUSTOMER_TABLE; 
    var $primarykey="nCustomerID"; 

} 
?> 

Quand je lance le code ci-dessus en créant cet objet de classe. c'est donner l'erreur d'analyse pour php.

Mais quand j'ai déclaré la première variable vide, son fonctionnement est correct. Veuillez vérifier le code qui fonctionne. Je peux donc affecter la variable de session à la variable de classe comme ci-dessus ou non.

EDIT:

Quelle est l'utilisation du mot-clé public, privé et protégé tout en déclarant variable de classe? Je cours sur php5.

Merci

Répondre

4

Lorsque vous attribuez des variables telles que de classe, ils ne peuvent pas réellement être variable. Autrement dit, ils doivent être une valeur littérale, comme une chaîne, ou une constante comme dans votre deuxième exemple qui a fonctionné.

Ok:

public $foo = 123; 
public $bar = "hello"; 
public $blah = SOME_CONSTANT; 

Non Ok:

public $foo = 123 + 45; 
public $bar = "hello" 
      . "world"; 
public $blah = some_function(); 

Qu'est-ce que vous voulez sans doute est exemple des variables. Ceux-ci sont initialisés dans le constructeur de classe, qui est une fonction qui est exécutée chaque fois que vous créez une nouvelle instance de cette classe.

class Foo { 
    public $bar, 
      $baths; 

    public function __construct($blah) { 
     $this->bar = $_SESSION['bar']; 
     $this->baths = $blah; 
    } 
} 
+0

Pouvez-vous expliquer à quoi sert le mot clé "Public, privé et protégé" pour déclarer la variable de classe ?? ?? Thx – Avinash

+0

Il détermine où vous pouvez accéder à ces membres. 'public' signifie qu'il est accessible de n'importe où. 'private' signifie qu'il est seulement accessible depuis l'intérieur de cette même classe. 'protected 'signifie qu'il n'est accessible qu'à partir de cette classe et de toutes ses sous-classes. Si vous utilisez 'var' ou n'utilisez pas explicitement' public/private/protected' sur vos fonctions, PHP est par défaut 'public'. – nickf

1

de faire l'affectation dans le constructeur.

1

Essayez avec:

<?php 
class ModifyProfile 
{ 
    var $tablename=WB_CUSTOMER_TABLE; 
    var $primarykey="nCustomerID"; 

    public function __construct() { 
     $this->userType = $_SESSION['wb_user_type']; 
    } 

} 
?> 
+0

mieux à mon humble avis, puisque vous pouvez ensuite utiliser une autre façon d'obtenir le type d'utilisateur: public function __construct (userType $) {$ this-> userType = $ userType; } et plus tard, utilisez: $ profile = new ModifyProfile ($ _ SESSION ['wb_user_type']); Vous pourriez également lire sur l'injection de dépendance. – dbemerlin

+0

__construct ne fonctionnera pas en PHP4 (et parce que l'auteur utilise "var" au lieu de public/private/protected cela peut être important) – radex

+0

A-t-il dit qu'il utilise 'PHP 4'? Peut-être que c'est son habitude? – hsz

4

Quelques: Tipps

  • se débarrasser de var, utilisez private/protected/public à la place.
  • Affectez la valeur requise dans le constructeur, voir la réponse de @ hsz.
  • Ne supposez pas $ _SESSION ['wb_user_type'] est défini, c'est une mauvaise pratique, votre classe ne sera pas portable.

Bon exemple:

<?php 
class ModifyProfile 
{ 
    protected $tablename=WB_CUSTOMER_TABLE; 

    public function __construct($user_type) { 
     $this->userType = $user_type; 
    } 

} 

$user_type = isset($_SESSION['wb_user_type']) ? $_SESSION['wb_user_type'] : 'n/a'; 

$profile = new ModifyProfile($user_type); 
?> 
Questions connexes