【问题标题】:php object property NULL in required page所需页面中的 php 对象属性 NULL
【发布时间】:2012-07-02 12:09:34
【问题描述】:

为什么会这样:

echo $session->name;
require_once('test.php');
//echos the name then loads the required page

但是

var_dump($session->name);

在test.php的代码中返回NULL。

我认为require_once 几乎会将所需页面中的所有代码放入我告诉它的位置。

编辑

$session 实例是在 test.php 之外的 require 之前创建的。如果我在 test.php 中创建一个新的 $session 实例,它就可以工作。很高兴它有效,但这对我来说仍然没有意义,谁能解释一下?

【问题讨论】:

  • 是 test.php 中唯一的 var_dump 吗?
  • 而 var_dump($session) 返回什么?
  • 没有其他代码在test.php 中运行良好。 var_dump($session) 在 test.php 之外时返回一个对象,但在其中时返回 NULL。
  • 查看我的编辑。已修复,但不知道为什么。
  • 这取决于您,但我认为您真的应该考虑跟踪此问题,而不是认为问题已解决。如果 $session 超出了 test.php 的范围,那肯定是有原因的。鉴于您最初编写的代码,它应该可以工作,而且它不意味着发生了一些奇怪的事情,这可能会在以后给您带来很多悲伤和冲突。如果您愿意继续进行故障排除,我还有一两个想法。

标签: php require-once


【解决方案1】:

$session 不在范围内。在你初始化 $session 的地方包含那个脚本。或在所有脚本中将其声明为全局,以便仅为 $session 保存包含。为什么不使用$_SESSION

【讨论】:

  • 将 $session 声明为全局并且有同样的问题,所以它不能是一个范围的事情。我在 $session 对象中使用$_SESSION 来处理许多不同的事情。
【解决方案2】:

愚蠢的问题:您是否已经在脚本的其他地方要求过 test.php?如果是这样,那么当您第一次包含它时,可能没有设置 $session。你试过 include('test.php') 吗?

调试编辑:

您可以通过尝试以下方法来验证调用的顺序:

在 caller.php(或任何你称之为的)文件中:

echo "Debug 1";
echo $session->name;
require_once('test.php');

在test.php中:

echo "Debug 2";
var_dump($session->name);

哪个先打印,Debug 1 还是 Debug 2?

【讨论】:

  • 在其他任何地方都不需要 test.php。 $session 实例是在我做任何其他事情之前创建的。
  • 致谁否决了这个:这被否决了,究竟是为什么?在没有任何理由认为这不可能是正确答案的情况下对答案投反对票是非常棘手的。我坐在这里有几个测试文件,根据 OP 的原始规范,由于双倍的 require_once,这些文件准确地复制了他所描述的内容。
  • Debug 1,转储对象,然后是Debug 2,为NULL
  • 这里有什么功能吗?特别是,test.php 中的 var_dump() 调用是否在函数中? test.php 中除了 var_dump() 调用还有什么?
  • 无功能。是的 test.php 中的其他内容,但没有打扰任何内容。仅使用 var_dump() 进行了尝试,结果相同
猜你喜欢
  • 2019-11-26
  • 2011-05-15
  • 2014-01-19
  • 2014-10-08
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多