Я часто сталкиваюсь с проблемой, когда переменные / атрибуты имеют неправильный тип.Проблема в том, что это трудно отследить, поскольку мой PHP (5.3) просто падает, не выдает ошибку и даже не записывает в журнал ошибок (* 1).Он просто падает.
Я думаю, что доступ к строке, такой как массив, не должен быть отслеживаемым, не так ли?Я имею в виду, что PHP не C правильно?
Есть ли способ изменить это поведение или какой-то лучший метод, чтобы обойти эту проблему?Помимо проверки каждой переменной везде и, следовательно, написания в 5 раз больше кода?
[Обновление] : Хорошо, если я упросту код за пределами Zend, похоже, он будет работать.Это должно быть как-то связано с Зендом.Хотя у меня есть все phpSettings, установленные в моем application.ini:
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] : Итак, я попытался повторить настройку php, используя ini_get прямо над моим кодом, и там написано error_reportingна E_ALL | E_STRICT, display_error включен и т. д.
Итак, это:
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 и так далее.Все хорошо.