我有2个班级
app/Classes/
|
|____ Helper/
| |
| |____ Helper.php <- contain Helper Class
|
|____ User/
|
|____ User.php <- contain User Class
我已经使用psr-4将类文件添加到自动加载器依赖项中。所以我可以命名为composer.json
{
"autoload": {
"psr-4": {
"Classes\\": "app/Classes"
}
},
"require": {
"vlucas/valitron": "1.3.*",
"ezimuel/php-secure-session": "dev-master"
}
}
从终端转储composer.phar
文件后。
在我的bootstrap.php
中,我添加了自动加载器依赖项
//bootstrap.php
require_once APP_ROOT . '/vendor/autoload.php';
$helper = new Helper();
$user = new User();
现在我的User
课程中我需要helper
课程
namespace Classes\User;
Class User
{
public function onlyAuthenticated()
{
if (!isset($_SESSION['user_id']) || empty($_SESSION['user_id'])) {
global $helper;
$helper->redirect('/index.php');
}
}
}
所有代码都正常运行但在global $helper;
类中使用User
是否安全?这是正确的方式吗?
答案 0 :(得分:1)
初始化时,您需要将$helper
声明为全局,以便稍后使用global关键字进行访问。
//bootstrap.php
...
global $helper;
$helper = new Helper();
那就是说,你最好不要这样做,至少对于那些我怀疑你Helper
课程做的事情。
您可以在Helper
中声明可以在没有全局变量的任何地方使用的静态函数。类似的东西:
class Helper{ //just some dummy code for demonstration purposes.
public static function redirect($url){
header("Location: " $url);
exit();
}
}
然后你可以这样称呼它:
Helper::redirect('/index.php');
请注意,这不那么冗长,而且我认为更清楚。它还具有不需要全局变量的优点。