-1

ログインのためにPHPクラスを使用しています。ログイン プロセスがユーザーをチェックする MySQL データベースは、次のように定義されます。

    class flexibleAccess{

  var $dbName = 'mydatabase';

ただし、さまざまな人にアプリケーションをインストールするため、この $dbName は常に変更する必要があります。データベース情報を保持する構成ファイルを作成することにしたので、このログイン クラスはどこかに「隠されている」ため、より簡単に変更する必要があります。問題は、次のようなことをしたいということです:

class flexibleAccess{

      var $dbName = $_SESSION['mydatabase'];

そして、エラーが表示されます:「解析エラー: 43 行目のパス/access.class.php の解析エラー」 43 行目は $dbName の行です...これを使用して動的に値を取得できないのはなぜですか?セッション?そして、どのように使用すればよいですか?

ありがとう

4

4 に答える 4

4

おそらく、セッションにデータベース構成を入れるべきではありません。私には少し危険に感じます。

情報を含む構成ファイルを作成し、定数を含めます。

dbconfig.php:

constant("DBNAME", 'mydatabase');

フレキシブルアクセス.php:

require_once 'dbconfig.php';

class flexibleAccess {
  private $dbname;

  // set the default database name to the constant DBNAME
  // but allow override
  public function __construct ( $dbname = DBNAME )
  {
    $this->dbname = $dbname;
  }
}

データベースへのアクセスが必要なファイル:

require_once 'flexibleaccess.php';

$db = new flexibleaccess();

もちろん、定数として設定する必要はありません。重要なのは、構成をコードとは別のファイルに入れることです。

于 2009-01-18T16:02:47.710 に答える
3

コンストラクターで実行します(ここではphp5を想定しています...)

class flexibleAccess{

   private $dbName;

   function __construct() {
         $this->dbName = $_SESSION['mydatabase'];
   }
}

php4 の場合は、代わりに __construct をクラスの名前に置き換えます。

于 2009-01-18T13:18:08.343 に答える
1

PHP 4 は初期化子として定数値のみを許可するため、クラスのコンストラクターでこの変数を割り当てる必要があります。

PHP 4 では、var 変数の定数初期化子のみが許可されています。非定数値で変数を初期化するには、オブジェクトがクラスから構築されるときに自動的に呼び出される初期化関数が必要です。このような関数はコンストラクターと呼ばれます (以下を参照)。

于 2009-01-18T13:20:03.550 に答える
0

または、クラスの呼び出し中にクラスがこの情報を読み取る場所を指定することもできます。次に例を示します。

<?php
$login = new flexibleAccess();
$login->dbName = $_SESSION['mydatabase'];
?>

このようにして、クラスはクリーンな状態を保ち、任意のソースまたはメソッドからデータベース名 (および異なる可能性があるその他の情報) を受け入れることができます。追加のボーナスとして、使用している PHP のバージョンに注意を払う必要はありません。どちらのバージョンでも問題なく動作します。

お役に立てれば!

-デイブ

于 2009-01-18T14:18:12.057 に答える