【问题标题】:PHP use Variable ScopePHP 使用变量作用域
【发布时间】:2013-02-18 22:20:19
【问题描述】:

我正在使用 slimphp 框架,我对路由函数的变量范围感到困惑。我有以下内容:

$app = new \Slim\Slim(array(
 'templates.path' => '../templates/',
 'view' => new Slim\Extras\Views\Twig()
));

$user = SES\Session::getInstance();

include 'routes.php';

$app->run();

//Routes.php

$app->get("/", function() use ($app, $user){
....
}

如果我不将global $user; 添加到顶部,Routes.php 将失败:

Notice: Undefined variable: user

为什么我可以从这个文件访问$app var,但我不能访问$user var?

【问题讨论】:

  • 通知指的是哪一行?如果您将routes.php 的内容移动到include 的位置会怎样?
  • $app->get() 调用周围还有哪些其他代码?如果它在函数或方法中,那么它当然不会在本地定义 $user。
  • 如果我将路由的内容移动到主引导程序中,它不会给我那个错误。没有封装$app->get()。我想这是有道理的,因为它在一个外部文件中,我需要调用global $user,但不知道为什么我不需要调用global $app
  • @Shawn Northrop:这是不可能的。 Routes.php的全部内容是什么?
  • @zerkms:我的路线文件在增长,但想法都是一样的。 <?php $app->('....', function() use($app,$user){..code..}); ... more routes ... ?> 仅此而已。

标签: php variables global-variables slim


【解决方案1】:

我已经缩小了问题的范围。我实际上并没有调用 include 'routes.php';我有一个实用功能,可以加载文件夹中的所有路由。我在我的引导程序中称之为:SES\Util::loadRoutes('../routes');这是一个静态函数,它读取一个目录并且需要 $filename;对于每个文件。我过去一定处理过这个问题,因为在这个函数中我声明了 global $app; Sooo.. 我仍然不完全理解何时需要调用 global 但这解决了部分困惑!

【讨论】:

    猜你喜欢
    • 2011-08-03
    • 2011-01-20
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多