0

我正在尝试将会话变量传递给下面的类。但是,它似乎没有工作,并引发以下错误:

解析错误:语法错误,第 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'];
    }
?>
4

5 回答 5

9

属性手册页:

类成员变量称为“属性”。您可能还会看到使用“属性”或“字段”等其他术语来提及它们,但出于本参考的目的,我们将使用“属性”。它们是通过使用关键字 public、protected 或 private 之一定义的,后跟一个普通的变量声明。这个声明可能包括一个初始化,但这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。

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

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

<?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']);
于 2013-04-12T12:10:02.207 回答
6

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

于 2013-04-12T12:05:28.187 回答
2

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

使用构造函数。

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

        }
}
于 2013-04-12T12:08:21.340 回答
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);
于 2013-04-12T12:11:40.470 回答
0
session_start();
class pardEngine{
  public function __construct(){
    $hostname = $_SESSION['HOSTNAME'];
    $database = $_SESSION['DATABASE'];
    $database_user = $_SESSION['USER'];
    $database_user_pass = $_SESSION['PASSWORD'];
   }
  }
于 2013-04-12T12:07:51.927 回答