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 に答える