包括php中另一个类的类

时间:2010-11-11 10:15:09

标签: php mysql

我有一个php页面,其中包含一些关于数据库的变量,即服务器地址,用户名和密码等。

config.php将包括

<?php 
  $dbserver="";
  $username="";
  $password="";
  $database=""; 
?>

我有一个课程,其中包含我网站所需的所有功能。如何将我的php页面变量导入此类以用于数据库连接?

我的班级

<?php
    class a{
      include("config.php");
      function db_connect(){
        mysql_connect($dbserver,$username,$password);
      }
    }
?>

3 个答案:

答案 0 :(得分:2)

通常为此目的,存在常量。

但是如果你想使用变量,你所要做的就是require_once(yourFile),然后当你想在类的方法中使用这些变量(它们是全局的)时,只需将它们称为{{ 1}}(就像你宣布它一样)。只需要为要在上下文中使用的每个全局变量执行此操作一次。

示例:

的settings.php:

global $myVar;

MyClass.php:

$conn = 'my connection';

答案 1 :(得分:2)

<强>更新

对于需要配置选项的Database类,最简单的方法是使用配置值作为参数(下面原始答案的示例1)。

更复杂但更灵活的方法是Config-Class。

class Config
{
  private $config = array();

  public function __construct(array $config)
  {
    $this->config = $config;
  }

  public function Register($key, $value)
  {
    $this->config[$key] = $value;
  }

  public function Get($key)
  {
    if (!isset($this->config[$key])) return null;
    return $this->config[$key];
  }
}

您的数据库类看起来像这样:

class Database
{
  private $config = null;

  public function __construct(Config $config)
  {
    $this->config = $config;
  }

  public function Connect()
  {
    do_connect_stuff($this->config->Get('host'), $this->config->Get('user'), .....);
  }
}

文件config.php

<?php

$config = new Config(
  array(
    "host" => "localhost",
    "user" => "user",
    ...
  )
);

/*
alternative:
$config = new Config();
$config->Register('host', 'localhost');
$config->Register('user', 'user');
...
*/
?>

需要数据库的文件:

<?php

$database = new Database($config);
$database->Connect();

?>

作为旁边提示:使用PDO,它比旧的mysql_*功能要好得多。


原始答案

正确的样式是将变量作为参数传递给函数,或者在创建对象时传递它们。您还可以使用Init方法传递参数。

示例:
(您应该使用以下哪些代码取决于您已经拥有的代码以及代码的设计方式,“最干净”的方式是在调用ProcessAction方法时传输变量的对象)

假设您的脚本中有一个变量$action,您可以从$ _GET或其他方式获得。

使用对象

class Controller
{
  public function ProcessAction($action, $some_other_parameter, $and_yet_another_parameter)
  {
    [...]
  }
}

然后用

调用它
$action = do_some_stuff_to_get_action();
$controller = new Controller();
$controller->ProcessAction($action, $other_parameter, $second_parameter);

使用静态类

class Controller
{
      public static function ProcessAction($action, $some_other_parameter, $and_yet_another_parameter)
      {
        [...]
      }
}

跟:

$action = do_some_stuff_to_get_action();
Controller::ProcessAction($action, $other_parameter, $second_parameter);

在调用函数之前传递参数

<强>对象

class Controller
{
  private $action = "";
  private $some_other_parameter = "";

  public function __construct($action, $some_other_parameter)
  {
    $this->action = $action;
    $this->some_other_parameter = $some_other_parameter;
  }

  public function ProcessAction()
  {
    if ($this->action == 'do_stuff')
    {
      [...]
    }
  }
}

跟:

$action = do_some_stuff_to_get_action();
$controller = new Controller($action, $other_parameter);
$controller->ProcessAction();

静态方法

class Controller
{
      private static $action = "";
      private static $some_other_parameter = "";

      public static function Init($action, $some_other_parameter)
      {
        self::$action = $action;
        self::$some_other_parameter = $some_other_parameter;
      }

      public static function ProcessAction()
      {
        if (self::$action == 'do_stuff')
        {
          [...]
        }
      }
}

跟:

$action = do_some_stuff_to_get_action();
Controller::Init($action, $other_parameter);
Controller::ProcessAction();

答案 2 :(得分:0)

我在类的构造函数中使用了数据库配置。我认为这是唯一的解决方案,不包括场景中的任何第三页。