【发布时间】:2018-01-21 18:12:29
【问题描述】:
我在尝试连接 config.php 中的数组时收到“无效的数据源名称”。如果我对其进行硬编码,它工作正常我在这里做错了什么?
谢谢
config.php
<?php
return [
'database' => [
'host' => 'mysql:host=127.0.0.1',
'database' => 'pdo_database',
'username' => 'root',
'password' => '',
'options' => [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]
]
];
连接.php
<?php
$config = require('config.php');
$database = $config['database'];
class Connection {
public function make() {
try {
return new PDO(
$database['host'].';dbname='.$database['database'],
$database['username'],
$database['password'],
$database['options']
);
} catch(PDOException $e) {
die($e->getMessage());
}
}
}
【问题讨论】:
-
$database不在范围内,您需要将其传递给make方法 -
好的,干杯。我是 PHP 新手,作用域与带作用域的 JS 有很大不同吗?不能访问类外的变量?
-
是的,没错。 PHP 没有任何变量范围继承——变量需要明确地传递给函数/方法。另一种方法是在函数内使用
global关键字从全局范围导入变量,但这是您希望尽可能避免的事情。 -
PHP 中有两个作用域:全局作用域(在任何函数之外使用的变量)和局部作用域(每个函数内部的不同作用域)。它们不相交。阅读有关variable scopes 的更多信息。为了您的头脑清醒,请远离
global和$GLOBALS;你不会后悔的。