我们可以将会话变量传递给类

时间:2013-04-12 12:02:40

标签: php mysql oop session

我试图将会话变量传递到下面的类中。但是,它似乎不起作用,并引发以下错误:

  

解析错误:语法错误,第6行的C:\ wamp \ www \ pard_config \ configuration.php中的意外T_VARIABLE

我该如何解决这个问题?

我的代码:

<?php
    session_start();
    class pardEngine{
        public $hostname = $_SESSION['HOSTNAME'];
        public $database = $_SESSION['DATABASE'];
        public $database_user = $_SESSION['USER'];
        public $database_user_pass = $_SESSION['PASSWORD'];
    }
?>

5 个答案:

答案 0 :(得分:8)

Properties手册页:

  

类成员变量称为“属性”。你也可以看到它们   引用使用其他术语,如“属性”或“字段”,但   出于本参考的目的,我们将使用“属性”。他们是   使用关键字public,protected或private之一定义,   然后是正常的变量声明。 此声明可能   包括初始化,但这个初始化必须是一个常量   value - 也就是说,它必须能够在编译时进行评估   不得依赖于运行时信息才能进行评估。

会话数据不适合编译时类别,因此您的属性只能通过常规代码设置,无论是在类外(因为它们是公共的)还是来自方法(可能是构造函数)

将这些值硬编码到类代码中通常是不切实际的,所以我会选择构造函数方法:

<?php

class pardEngine{
    private $hostname;
    private $database;
    private $database_user;
    private $database_user_pass;

    public function __construct($hostname, $database, $database_user, $database_user_pass){
        $this->hostname = $hostname;
        $this->database = $database;
        $this->database_user = $database_user;
        $this->database_user_pass = $database_user_pass;
    }
}


session_start();
$engine = new pardEngine($_SESSION['HOSTNAME'], $_SESSION['DATABASE'], $_SESSION['USER'], $_SESSION['PASSWORD']);

答案 1 :(得分:6)

在此类的constructor中分配这些属性,而不是这样。

答案 2 :(得分:2)

您不能在类声明部分中分配这些值。

使用构造函数。

session_start();
class pardEngine{
        function __construct() {
             $hostname = $_SESSION['HOSTNAME'];
             $database = $_SESSION['DATABASE'];
             $database_user = $_SESSION['USER'];
             $database_user_pass = $_SESSION['PASSWORD'];

        }
}

答案 3 :(得分:1)

创建一个能够从数组创建对象的函数:

class pardEngine
{
    public $hostname;
    public $database;
    public $database_user;
    public $database_user_pass;

    /**
     * @param array $array
     * @return partEngine
     */
    public static function createFromArray($array) {
        $obj                     = new static;
        $obj->hostname           = $array['HOSTNAME'];
        $obj->database           = $array['DATABASE'];
        $obj->database_user      = $array['USER'];
        $obj->database_user_pass = $array['PASSWORD'];

        return $obj;
    }
}

用法:

session_start();
$engine = pardEngine::createFromArray($_SESSION);

答案 4 :(得分:0)

session_start();
class pardEngine{
  public function __construct(){
    $hostname = $_SESSION['HOSTNAME'];
    $database = $_SESSION['DATABASE'];
    $database_user = $_SESSION['USER'];
    $database_user_pass = $_SESSION['PASSWORD'];
   }
  }