变量值只能通过xdebug而不是php代码来更改

时间:2015-02-03 13:11:06

标签: php xdebug

在编写一些PHP代码时遇到了一个奇怪的问题。如果我在代码中更改先前分配的变量的值,则该值不会持久保存到应用程序的其他部分。如果我设置断点然后通过我的调试器更改值,则该值将持续到后面的部分。

更奇怪的是,如果我在代码中更改它并在设置断点后,当我更改值时,它不会通过我的代码的后半部分。

有谁知道这里会发生什么?

变量是通过引用传递给函数的数组的一部分,如果我将一个元素添加到父数组中包含的另一个数组中,则该元素会持续存在。

这个问题现在出现了几次。

PHP版本5.4.36-0 + deb7u3 Xdebug版本2.2.1

下面是请求的代码示例,来自Drupal所以可能有点难以进入但是当断点启动时我可以看到我想要更改的变量具有正确的值集。然而,在再次使用变量时,这已经丢失了。如果我删除设置新值(用于标题)的行,而是在我的调试器中更改它,这可以正常工作。

function eh_link_block_preprocess_entity(&$variables) {

  if ($variables['entity_type'] == 'eh_link_block') {
    $wrapper = entity_metadata_wrapper('eh_link_block', $variables['eh_link_block']);

    $wrapper->field_link->title->set('New Title');

    xdebug_break();    
  }

}

1 个答案:

答案 0 :(得分:0)

您是否有机会使用OPCache?检查php.ini或phpinfo()输出“opcache”字符串,如果使用它,它会缓存文件一段时间。

APC Cache也可以缓存文件,尝试运行此代码,然后运行有问题的脚本(更好的方法是在php.ini中禁用APC,然后重新启动Web服务器,然后测试脚本)

apc_clear_cache();
apc_clear_cache('user');
apc_clear_cache('opcode');