PHP - вызовите функцию в объекте с set_error_handler ()

Алгоритм, который вы использовали для решения лабиринта, представляет собой алгоритм DFS , и предоставленное решение не обязательно будет кратчайшим путем к месту назначения.

Конечное условие вашей рекурсии гарантирует, что вы получите только одно решение. То, что вы рассматриваете как несколько решений, на самом деле является одним решением, как можно видеть из следующего печатного примера, основанного на вашем коде (сетка 10 * 10, xx - стены, пункт назначения - (6) (3), каждый лабиринт ячейка заключена в '|', посещенные ячейки - 's):

enter image description here

другой пример:

enter image description here

и еще один:

enter image description here

Пронумерованные шаги в решение показывает, что алгоритм DFS обеспечил очень длинный и извилистый путь к месту назначения.

Итог - вы получаете одно решение, которое намного длиннее, чем вы думаете.

8
задан alex 8 December 2010 в 13:28
поделиться

2 ответа

Немного проблем с этим.

Во-первых:

'$this->appendError'
остановка. Это не интерпретирует $this к текущему классу, php интерпретирует его как строку '$this'.

Во-вторых: попробовать

set_error_handler(array($this, 'appendError'));

Если это не работает, $this замены с именем класса и использует его статически.

22
ответ дан 5 December 2019 в 07:13
поделиться

Прочитайте документацию обратного вызова php.net. Я думаю, что пример 3 является самым близким к тому, что Вы хотите:

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
1
ответ дан 5 December 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: