-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 回答