Когда я запускаю пример кода по адресу http://us2.php.net/manual /en/exception.gettrace.php Я не получаю аргументов в обратной трассировке, как в выходных данных примера.

Это ошибка PHP или мне что-то не хватает?

Мой вывод:

array (1) {[0] => array (3) {["file"] => строка (25) "D: \ www \ project \ index.php" ["line"] => int (79) [ "функция"] => строка (4) "тест"}}

Я использую PHP 5.2.8.

Изменить: Пример выходных данных - это запуск кода примера PHP.net с аргументами функции или без них.

php
3
Znarkus 29 Сен 2009 в 17:02
Можете ли вы вставить код, в котором возникло исключение?
 – 
Neel
29 Сен 2009 в 17:07
Прочтите вопрос еще раз, используется код на странице примера, на которую ссылается OP.
 – 
jakeisonline
29 Сен 2009 в 17:10
А что произойдет, если вы передадите в функцию аргументы?
 – 
NDM
29 Сен 2009 в 17:53
Да, это пример кода с php.net. И если я передаю аргументы функции, ничего не происходит, я все равно получаю вышеуказанный результат.
 – 
Znarkus
29 Сен 2009 в 18:00

3 ответа

Лучший ответ

Я попытался перейти на PHP 5.2.9 (XAMPP 1.7.1), но это не сработало. Но когда я попробовал среду Linux, работающую под управлением PHP 5.2.11, это сработало. Я разместил полный тестовый код ниже.

<?php

error_reporting(E_ALL | E_STRICT);
header('Content-type: text/plain; charset=utf-8');

function a($a) {
    throw new Exception2('EXCEPTION MESSAGE');
}

function b($b) {
    a($b);
}

try {
    b('THIS PARAMETER SHOULD SHOW UP');
} catch(Exception $e) {
    var_dump($e);
}


class Exception2 extends Exception
{
    public function __construct()
    {
        $args = func_get_args();
        call_user_func_array(array($this, 'parent::__construct'), $args);

        var_dump(debug_backtrace());
    }
}

Спасибо за вашу помощь!

0
Znarkus 7 Окт 2009 в 00:24

Хм, странно.

Следующий (класс) действительно работает ... Но он все равно должен выдавать аргументы, даже если вы перегрузите его до нормальной функции.

<?php
class Test{
    function __construct($arg){
        $this->test($arg);
    }
    function test($args) {
     throw new Exception;
    }
}

try {
    new Test('Yar');
} catch(Exception $e) {
//print_r(debug_backtrace());
 var_dump($e->getTrace());
}
?>
2
Deefjuh 29 Сен 2009 в 17:59

Я только что попробовал его на своей локальной установке, и, похоже, он работает как рекламируемый, хотя я использую 5,3 атм ...

Он по-прежнему должен выдавать хотя бы пустой массив, даже если аргументы не переданы ...

Попробуйте поискать в Google ошибку в вашей конкретной версии PHP или выполните поиск в системе отслеживания ошибок php.net

1
NDM 29 Сен 2009 в 18:08