在PHP中初始化类变量时,将会话变量分配给类变量

时间:2010-01-29 14:36:43

标签: php oop class

我有一个问题,就是在初始化类变量时将会话变量赋值给类变量。

检查我的以下代码

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

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

}
?>

当我通过创建这个类对象来运行上面的代码时。它为php提供了解析错误。

但是当我将第一个变量声明为空白时,它的工作正常。 请检查正在运行的代码。

<?php 
class ModifyProfile
{
    var $userType='';

    var $tablename=WB_CUSTOMER_TABLE;
    var $primarykey="nCustomerID";
}
?>

所以我可以将会话变量分配给类变量,如上所述。

修改

在声明类变量时,public,private和protected关键字有什么用? 我在php5上运行。

由于

4 个答案:

答案 0 :(得分:4)

当您指定变量时,它们实际上不可变。也就是说,它们必须是一个字面值,例如字符串,或者像第二个例子中那样有效的常量。

确定:

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

不行:

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

您可能想要的是实例变量。这些是在类构造函数中初始化的,这是一个在创建该类的新实例时运行的函数。

class Foo {
    public $bar,
           $baths;

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

答案 1 :(得分:4)

一些tipps:

  • 取消var,改为使用private / protected / public
  • 在构造函数中指定所需的值,请参阅@ hsz的答案。
  • 不要假设$ _SESSION ['wb_user_type']已设置,这是一种不好的做法,您的课程将无法移植。

很好的例子:

<?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);
?>

答案 2 :(得分:1)

在构造函数中进行赋值。

答案 3 :(得分:1)

尝试:

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

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

}
?>