当变量/属性的类型错误时,我经常遇到问题。问题是很难追踪,因为我的 PHP (5.3) 只是崩溃了,没有发出错误,甚至没有写入错误日志 (*1)。它只是崩溃。
我认为访问像数组这样的字符串不应该是不可追踪的吗?我的意思是,PHP 不是 C 对吗?
有没有办法改变这种行为或某种最佳实践来解决这个问题?除了一直检查每个变量并因此编写 5 倍以上的代码之外?
[更新]:好的,如果我在 Zend 之外简化代码,它似乎可以工作。它一定与 Zend 相关。虽然我确实在我的 application.ini 中设置了所有 phpSettings:
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
phpSettings.error_reporting = "E_ALL|E_STRICT"
导致错误的代码(我刚刚尝试在沙箱中工作)是这样的:
$prefix = (strpos($obj[3][1], 'videometa') !== false) ? "http://www7.example.org" : "http://www.example.org";
其中 $obj 是一个 json 字符串。
[更新 2]:所以我尝试使用代码上方的 ini_get 回显 php 设置,它说 error_reporting 在 E_ALL|E_STRICT 上,display_error 为 ON 等。
所以这:
echo '<br/>ini_get = '.ini_get('display_errors').';';
echo '<br/>ini_get = '.ini_get('error_reporting').';';
echo '<br/>ini_get = '.ini_get('error_log').';';
echo '<br>$obj: ';
$obj = 'peter';
var_dump($obj);
echo '<br/>Now for the critical code:';
$prefix = (strpos($obj[MC_IMAGETYPE_VDT][1], 'videometa') !== false) ? "http://www7.example.org" : "http://www.example.org";
echo '<br/>It never shows this!';
发这个:
ini_get = 1;
ini_get = E_ALL|E_STRICT;
ini_get = /Applications/MAMP/logs/php_error.log;
$obj: string(5) "peter"
Now for the critical code:
然后停止。有任何想法吗?
*1。php.ini 有 display_errors = On 和 error_reporting = E_ALL 等等。都好。