如何在PHP类中访问外部变量?

时间:2018-02-27 12:54:46

标签: php class variables global external

我知道之前已经讨论过,但我正在寻找一种稍微简单的方法。我有一个非常简单的文件,我在其中创建一个数据库连接(PDO)。它看起来像这样:

$databaseDSN = 'mysql:host='.databaseHost.';dbname='.databaseData.';charset='.databaseChar.'';

$databaseOpt = [
    PDO::ATTR_ERRMODE               => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE    => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES      => false,
    PDO::ATTR_PERSISTENT            => true,
];

$PDO = new PDO($databaseDSN, databaseUser, databasePass, $databaseOpt);

这是我的网络应用程序中唯一的连接,因此,我希望能够使用我创建的对象作为它的标识符。它给了我一些问题。例如,我有一个用户类,我有login,logout和auth等方法(验证是否已登录)。我需要在这些方法中非常简单地访问我的$ PDO var,但似乎没有任何效果。我可以在不将变量传递给我的班级的情况下简化事情吗?正如我所提到的那样,var / connection永远不会改变,我发现每次连接都没有必要将它作为参数传递。这是我班级的一部分:

class User {

    public static function login() {

        $query = $PDO->prepare("SELECT * FROM users WHERE username=?");
        $query->execute([$_POST['username']]);
        $result = $query->fetch();

        if($result && password_verify($_POST['password'], $result['password'])) {
                    $_SESSION['username'] = $_POST['username'];
                    $_SESSION['language'] = $result['language'];
                    $_SESSION['template'] = $result['template'];

                    $_SESSION['loggedin'] = true;
                    $_SESSION['uniqueid'] = md5(uniqid(uniqidPrefix), true);

                    $query = $PDO->prepare("INSERT INTO sessions (username, uniqueid, authtime, ipaddress) VALUES (?, ?, ?, ?)");
                    $query->execute([$_POST['username'], $_SESSION['uniqueid'], date('Y-m-d H:i:s'), $_SERVER['REMOTE_ADDR']]);

                    Log::write('info', 'User '.$_SESSION['username'].': succesful login!');

                    header('Location: index.php');
        } else {
            Log::write('error', 'Invalid credentials: '.$_SESSION['username']);

            header('Location: index.php?logout');
        }
    }

有什么方法可以让我的班级中的$ PDO变量在临时基础上运行?我试过这个,但它没有用:

class User {

    private $PDO;

    public function __construct() {
        global $PDO;

        $this->PDO = $PDO;
    }

有什么想法吗?

谢谢!

0 个答案:

没有答案