PHP类作用域
我对PHP相当陌生。在整个PHP应用程序中控制类访问的最佳方法是什么?在哪里存储这些需要在整个应用程序中访问的类是最好的?例子;我有一个在登录过程中在上创建的用户类,但每次页面发布时,似乎都会重新初始化该对象PHP类作用域,php,Php,我对PHP相当陌生。在整个PHP应用程序中控制类访问的最佳方法是什么?在哪里存储这些需要在整个应用程序中访问的类是最好的?例子;我有一个在登录过程中在上创建的用户类,但每次页面发布时,似乎都会重新初始化该对象 我试图设置属性IsLoggedIn,然后在再次将对象创建为新对象之前检查该变量,但这似乎不起作用。我还尝试在PHP中使用isSet函数来查看类变量是否已经存在这种数据必须存储在会话中,从一页到另一页的唯一内容是会话数据(会话/cookies/…),因此不会进行类初始化 您可以通过以下方式将
我试图设置属性IsLoggedIn,然后在再次将对象创建为新对象之前检查该变量,但这似乎不起作用。我还尝试在PHP中使用isSet函数来查看类变量是否已经存在这种数据必须存储在会话中,从一页到另一页的唯一内容是会话数据(会话/cookies/…),因此不会进行类初始化 您可以通过以下方式将用户用户名等信息添加到会话:
$username //username from db
$name //name from db
$_SESSION['username'] = $username;
$_SESSION['name'] = $name;
或者,如果您只想轻松访问有关用户的所有信息,可以执行以下操作:
$_SESSION['user'] = mysql_fetch_assoc($result); //where $result is the response from the db to your login query
完成此操作后,$\u会话['user']将成为一个数组,其中包含您从数据库中选择的所有详细信息。没错,应用程序的状态不会从一个请求转移到另一个请求 与桌面应用程序相反,web应用程序不会保持初始化状态,因为对于服务器来说,每次它都可能是另一个访问者,想要完全不同的东西。您知道谁在使用桌面应用程序,但不一定知道谁在请求页面。想象一下10个用户在您的web应用程序上同时做不同的事情?您不必为每个访问者都保持整个应用程序的运行。想象一下有10000名访客 不过,有一些方法可以在请求之间保存一些数据。每次都会重新初始化应用程序,是的,但是您可以重新加载正在执行的操作的状态。它始终围绕着相同的一般方法:
<?php
// verify if we have a current session
if (isset($_SESSION['login'])) {
// get data in current session
$username = $_SESSION['login']['username'];
$isLoggedIn = $_SESSION['login']['isLoggedIn'];
} else {
$username = '';
$isLoggedIn = false;
}
// take care of the unauthorized users
if (!$isLoggedIn) {
// maybe a redirection here...
}
// do the things a logged in users has the permission to do
<?php
// handle the form post of your login page for example
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
// verify the username and password against a database
if ($everythingIsOkay) {
// we can consider this user logged in and create a session
$_SESSION['login']['username'] = $username;
$_SESSION['login']['isLoggedIn'] = true;
// and now maybe redirect the user to the correct page
}
}
// raise an error about an invalid login
<?php
unset($_SESSION['login']);
// redirect the user to the login page