XDebug 用于评估变量何时从 'else If' 语句设置为 True
XDebug to evaluate when a Variable is set to True from 'else If' Statement
我将 PhpStorm 与 WAMP 本地主机结合使用并启用了 xdebug。
寻找利用 xdebug 和 PhpStorm 的最佳解决方案来调试我的 PHP 脚本以查看哪一行 $var = true;
这是我的脚本的样子。这是一个嵌套 foreach
for loop
foreach ($array as $index => $values) {
$count = count($values);
for ($i=0;$i<$count;$i++) {
$word = false;
$string = $values[$i]['word'];
if (isset($values[$i+1]['word'])) {
$stringafter = $values[$i+1]['text'];
}
if (strpos($string, 'Which') !== false && $word != true) {
if (strpos($stringafter, 'of') !== false) {
$string = $string;
$word = true;
}
else {
$string = NULL;
$word = true;
}
}
//ending first if condition loop
elseif (preg_match('/[A-Z]/', $string) && $word != true) {
//word contains at least one uppercase letter
$uc = preg_match('/^[A-Z]:\.*/', $string, $uccheck);
$firstletter = $uccheck[0];
if ($firstletter == strtoupper($firstlette)) {
// first letter is uppercase
$string = $string;
$word = true;
}
else {
$string = NULL;
$word = true;
}
}
//ending first elseif condition loop
elseif ($word != true) {
$string = NULL;
$word = true;
}
//ending second elseif condition loop
$word = false;
// setting $word back to false at end of for loop for next word
}
//ending for loop
}
//ending foreach loop
目前我只是把这个断点放在 $searchword = false;
的正上方
if ('test' == 'test') {
$true = true;
$getword = $word;
}
然后我可以遍历每个循环和条件,它会一一告诉我它是否通过这个循环以及在哪里$word = true
;正在发生。
这很有用,但如果我想做的只是找出 [=16] 中的每个 $string
变量在条件循环 $word = true;
中发生的位置,这似乎是不必要的缓慢=].
我希望我可以在 PhpStorm 中右键单击调试器 > 变量控制台,其中显示 $word = true;
并选择选项 'Jump to Source'
.. 但它只是让我回到开始我的 for 循环,其中声明了 $word = false
。
除了迭代或查看输出之外,是否有更简单的方法自动告诉我 $word = true;
的定义位置,而不是手动查看调试输出?
编辑:
评论有点长,所以我想我要重申一下。
@MrGlass 解释说 ($word == true)
等条件语句可以用在 if
语句中,但经过进一步测试,这个条件只适用于 if
语句而不是 elseif
语句。
示例:
Line 100: elseif (preg_match('/[A-Z]/', $string) && $word != true) {
Line 101: //word contains at least one uppercase letter
Line 102: $uc = preg_match('/^[A-Z]:\.*/', $string, $uccheck);
Line 103: $firstletter = $uccheck[0];
Line 104: if ($firstletter == strtoupper($firstlette)) {
Line 105: // first letter is uppercase
Line 106: $string = $string;
Line 107: $word = true;
Line 108: }
Line 109: }
正如我在下面的评论中巧妙地解释的那样,如果我在 PHPStorm 中附加条件,例如 $word == true
或 ($word == true)
到 Line 100
,我不会得到 results/breakpoints.如果我将它附加到 Line 108
或 Line 109
上的结束花括号,我仍然没有匹配到我的断点。
如果我将断点放在第 104 行的条件 ($word == true)
我会得到我想要的结果。
有没有办法让 xDebug 在 elseif
语句中跟踪这种情况?
在 PhpStorm 中,如果您 right-click
在调试指示器(行号边距中的圆圈)上,您可以设置调试器在该行中断的条件。
我将 PhpStorm 与 WAMP 本地主机结合使用并启用了 xdebug。
寻找利用 xdebug 和 PhpStorm 的最佳解决方案来调试我的 PHP 脚本以查看哪一行 $var = true;
这是我的脚本的样子。这是一个嵌套 foreach
for loop
foreach ($array as $index => $values) {
$count = count($values);
for ($i=0;$i<$count;$i++) {
$word = false;
$string = $values[$i]['word'];
if (isset($values[$i+1]['word'])) {
$stringafter = $values[$i+1]['text'];
}
if (strpos($string, 'Which') !== false && $word != true) {
if (strpos($stringafter, 'of') !== false) {
$string = $string;
$word = true;
}
else {
$string = NULL;
$word = true;
}
}
//ending first if condition loop
elseif (preg_match('/[A-Z]/', $string) && $word != true) {
//word contains at least one uppercase letter
$uc = preg_match('/^[A-Z]:\.*/', $string, $uccheck);
$firstletter = $uccheck[0];
if ($firstletter == strtoupper($firstlette)) {
// first letter is uppercase
$string = $string;
$word = true;
}
else {
$string = NULL;
$word = true;
}
}
//ending first elseif condition loop
elseif ($word != true) {
$string = NULL;
$word = true;
}
//ending second elseif condition loop
$word = false;
// setting $word back to false at end of for loop for next word
}
//ending for loop
}
//ending foreach loop
目前我只是把这个断点放在 $searchword = false;
if ('test' == 'test') {
$true = true;
$getword = $word;
}
然后我可以遍历每个循环和条件,它会一一告诉我它是否通过这个循环以及在哪里$word = true
;正在发生。
这很有用,但如果我想做的只是找出 [=16] 中的每个 $string
变量在条件循环 $word = true;
中发生的位置,这似乎是不必要的缓慢=].
我希望我可以在 PhpStorm 中右键单击调试器 > 变量控制台,其中显示 $word = true;
并选择选项 'Jump to Source'
.. 但它只是让我回到开始我的 for 循环,其中声明了 $word = false
。
除了迭代或查看输出之外,是否有更简单的方法自动告诉我 $word = true;
的定义位置,而不是手动查看调试输出?
编辑:
评论有点长,所以我想我要重申一下。
@MrGlass 解释说 ($word == true)
等条件语句可以用在 if
语句中,但经过进一步测试,这个条件只适用于 if
语句而不是 elseif
语句。
示例:
Line 100: elseif (preg_match('/[A-Z]/', $string) && $word != true) {
Line 101: //word contains at least one uppercase letter
Line 102: $uc = preg_match('/^[A-Z]:\.*/', $string, $uccheck);
Line 103: $firstletter = $uccheck[0];
Line 104: if ($firstletter == strtoupper($firstlette)) {
Line 105: // first letter is uppercase
Line 106: $string = $string;
Line 107: $word = true;
Line 108: }
Line 109: }
正如我在下面的评论中巧妙地解释的那样,如果我在 PHPStorm 中附加条件,例如 $word == true
或 ($word == true)
到 Line 100
,我不会得到 results/breakpoints.如果我将它附加到 Line 108
或 Line 109
上的结束花括号,我仍然没有匹配到我的断点。
如果我将断点放在第 104 行的条件 ($word == true)
我会得到我想要的结果。
有没有办法让 xDebug 在 elseif
语句中跟踪这种情况?
在 PhpStorm 中,如果您 right-click
在调试指示器(行号边距中的圆圈)上,您可以设置调试器在该行中断的条件。