PHP:在函数中设置全局变量

时间:2018-03-03 22:57:01

标签: php

我有以下代码

$user;
if (isset($_POST['submitLogin']))
{ 
    $GLOBALS['user'] = logIn();
    // location1
}

function logIn()
{
    $user = new User("my username", "my email");
    return $user;
}

// location2

然后我想显示这样的信息:

echo $GLOBALS['user']->__get('username');

但它只适用于location1。 我通过使用全局数组并将数据从User实例传递到该全局数组来解决这个问题,但这违背了使用类的目的。 如果你能给我一个提示或让我走上正确的轨道,我将非常感激。

2 个答案:

答案 0 :(得分:0)

我不太关注你的要求。但是你总是可以通过参数将对象传递给函数,而不是使用全局变量。在这里示范:

<?php
ini_set('display_errors', true);
error_reporting(E_ALL);

class UserSignup
{
    public $username;
    public $email;

    public function __construct($username, $email)
    {
        $this->username = $username;
        $this->email    = $email;
    }
}

function process_signup_form()
{
    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    { 
        $user = new UserSignup(
            $_POST['username'] ?? null,
            $_POST['email']    ?? null
        );
        if(signup($user))
            echo 'Thanks for signing up!';
    }
}

function signup(UserSignup $user)
{
    echo 'Signing up:' . $user->username . ' with email:' . $user->email;

    return true;
}

process_signup_form();
?>
<form method="post">
    <input type="text" name="username">
    <input type="email" name="email">
    <input type="submit">
</form>

答案 1 :(得分:0)

如上所述:https://stackoverflow.com/a/132197/9439763

  只要在调用session_start()时已经遇到类声明/定义,或者已经可以找到类声明/定义,那么确定[将对象存储在$ _SESSION中]安装的自动加载器。否则它将无法从会话存储中反序列化对象。

这是问题,我现在通过在会话调用之前包含类声明来修复它。

<?php
require_once './model/user.class.php';
session_start();
...

谢谢大家,特别感谢@Kodos Johnson为我指路。

相关问题