array_shift会导致 php 静默崩溃


array_shift causes php to silently crash

我有一小段代码:

echo '<br>T COUNT '.count($tokens);
echo '<br>ARRAY COUNT '.count($tokens);
while (count($tokens)) {
  echo '<br>I GET HERE';
  echo '<pre>'.print_r($tokens,true).'</pre>';
  $token = array_shift($tokens);
  echo '<br>BUT NOT HERE '.$token;
  ...
}

这导致PHP无声地崩溃,它让我完全被难住了。在下面的输出中,您可以看到它通过print_r向上执行,但在array_shift后没有立即到达 echo 语句,您还可以看到$tokens变量print_r为"数组"(还有一个小数组 - 应该非常易于管理)。我什至尝试在array_shift周围放置一个 try/catch,并在 catch 中放置调试输出,但没有打印任何内容。

ARRAY COUNT 1
I GET HERE
Array (
    [0] => SassScriptFunction Object
        (
            [name:SassScriptFunction:private] => rgb
            [args:SassScriptFunction:private] => Array
                (
                    [0] => SassNumber Object
                        (
                            [numeratorUnits:SassNumber:private] => Array
                                (
                                )
                            [denominatorUnits:SassNumber:private] => Array
                                (
                                )
                            [inExpression] => 1
                            [value] => 0
                            [units] => 
                        )
                    [1] => SassNumber Object
                        (
                            [numeratorUnits:SassNumber:private] => Array
                                (
                                )
                            [denominatorUnits:SassNumber:private] => Array
                                (
                                )
                            [inExpression] => 1
                            [value] => 0
                            [units] => 
                        )
                    [2] => SassNumber Object
                        (
                            [numeratorUnits:SassNumber:private] => Array
                                (
                                )
                            [denominatorUnits:SassNumber:private] => Array
                                (
                                )
                            [inExpression] => 1
                            [value] => 0
                            [units] => 
                        )
                )
        )
)
我很

确定array_shift这不是问题。

线

echo '<br>BUT NOT HERE '.$token;

是,因为您使用对象作为字符串。

尝试使用

echo '<br>BUT NOT HERE '.print_r($token,true);

由于array_shift()可以通过引用处理数组,因此您可以轻松尝试如下操作:

$tokens = [
    '32h',
    '235hg',
    'sdfdsdngdfngdf',
    'sfngfsnn',
    'sfngsfn',
    'sfnsgfnnfsnbsfgn',
    'fsnfgsng',
    'sfgnsfgn'
];
$count = count($tokens);
for ($i = 0; $i < $count; $i++) {
    echo '<br>I GET HERE';
    echo '<pre>' . print_r($tokens, true) . '</pre>';
    array_shift($tokens);
}

我不知道你的$tokens数组是什么样子的,所以我随机编了一个。

上面的例子按预期完美运行。

Example

唯一的其他建议是(如评论中所述)打开错误报告。

ini_set('display_errors', 1);
error_reporting(E_ALL);

此外,如前所述,我们不知道$tokens是什么样子的。您能否提供一个例子,因为这可能是您的问题。(如@DrSpy所述计数为 1)