我有以下代码
$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实例传递到该全局数组来解决这个问题,但这违背了使用类的目的。 如果你能给我一个提示或让我走上正确的轨道,我将非常感激。
答案 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为我指路。