PHP构造函数无法访问outdside类变量

时间:2014-03-09 09:31:00

标签: php oop constructor

我在使用外部文件中定义的变量时遇到问题,无法在类构造函数中使用。

basic.php:

<?php
$config = array(
'sqlHost'       => 'localhost',
'sqlUser'       => 'root',
'sqlPassword'       => '',
'sqlDatabase'       => 'test',
);

$temp= "test";
?>

test.php的:

<?php
require_once('basic.php');

class foo{
    private $bar;

    function __construct() {
        $this->bar = new mysqli($config['sqlHost'],$config['sqlUser'],$config['sqlPassword'],$config['sqlDatabase']);
    echo $temp;    
    }
}
$tester = new report;
?>

我总是回过头来定义$ config,但是,$ temp有效。

任何想法如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

dependency injection注明它(好) 要么 使用global modifier(坏)......

答案 1 :(得分:0)

<?php

// ... your class

public function __construct(array $config)
{
     // set class properties but check first if config is valid
}

或将你的配置放在一个自己的类中,然后将这个配置注入你的foo类

<?php

// ... your class

public function __construct(Config $config)
{
     // set class property
}

旁注: 由于这似乎是针对数据库连接,因此请确保仅为请求创建一个对象。有些人使用Singleton模式,但我不推荐它。最后,它是您的代码,因此只有您可以决定解决方案的外观。

答案 2 :(得分:-2)

在test.php中

<?php
require_once('basic.php');

class foo{

global $config;   // add this line.

    private $bar;

    function __construct() {
        $this->bar = new mysqli($config['sqlHost'],$config['sqlUser'],$config['sqlPassword'],$config['sqlDatabase']);
    echo $temp;    
    }
}
$tester = new report;
?>

然后它会起作用