2. Отладка кода вдвое сложнее,
чем его написание.
Так что если вы пишете код
настолько умно, насколько
можете, то вы по определению
недостаточно сообразительны,
чтобы его отлаживать.
Брайан Керниган
4. Популярные практики при отладке PHP приложений.
1. Вывод ошибок
2. Значения переменной
3. Структурные данные
4. Отслеживание выполнения кода
5. Исследование объектов
6. Запросы к БД
5. Популярные практики при отладке PHP приложений.
Вывод ошибок
Значения переменной
Структурные данные
Отслеживание выполнения кода
Исследование объектов
Запросы к БД
Вывод ошибок
Непосредственно в приложении: В php.ini:
ini_set('display_errors', 'On'); display_errors = On
error_reporting(E_ALL | E_STRICT); error_reporting = E_ALL | E_STRICT
6. Популярные практики при отладке PHP приложений.
Вывод ошибок
Значения переменной
Структурные данные
Отслеживание выполнения кода
Исследование объектов
Запросы к БД
Вывод значения переменной
echo $myVar;
Практически бесполезно.
В большинстве случаев — потраченное зря время.
7. Популярные практики при отладке PHP приложений.
Вывод ошибок
Значения переменной
Структурные данные
Отслеживание выполнения кода
Исследование объектов
Запросы к БД
Вывод структурных данных
echo '<pre>'. var_dump($myArray);
print_r($myArray, true).
'</pre>';
Array
( array(2) { ["key1"]=> string(7) "value 1" ["key2"]=>
[key1] => value 1 string(7) "value 2" }
[key2] => value 2
)
8. Популярные практики при отладке PHP приложений.
Вывод ошибок
Значения переменной
Структурные данные
Отслеживание выполнения кода
Исследование объектов
Запросы к БД
Отслеживание выполнения кода
debug_backtrace() и print_debug_backtrace()
9. Популярные практики при отладке PHP приложений.
Вывод ошибок
Значения переменной
Структурные данные
Отслеживание выполнения кода
Исследование объектов
Запросы к БД
Что же у нас за объект?
get_class()
get_class_vars()
get_declared_classes()
method_exists()
10. Популярные практики при отладке PHP приложений.
Вывод ошибок
Значения переменной
Структурные данные
Отслеживание выполнения кода
Исследование объектов
Запросы к БД
Запросы к БД
a) echo $sql = "SELECT `some_field1` FROM `table` WHERE `some_field2` = '$var'";
b) $res = mysql_query($sql) or die(mysql_error());
18. Применение стандартных практик в Magento
Вывод структурных данных
$customer = Mage::getModel('customer/customer')->load(1);
echo '<pre>'.print_r($customer->debug(), true);
20. Применение стандартных практик в Magento
Отслеживание выполнения кода
debug_backtrace()
Varien_Debug::backtrace()
print_debug_backtrace()
21. Применение стандартных практик в Magento
Изучение объекта
get_class()
get_class_vars()
get_declared_classes()
method_exists()
Используется повсеместно в Magento
22. Применение стандартных практик в Magento
Запросы к базе данных
echo $sql = "SELECT `some_field1` FROM `table`”;
$res = mysql_query($sql) or die(mysql_error());
23. Применение стандартных практик в Magento
Запросы к базе данных
Вывести запрос:
$myCollection->load(true);
Записать запрос в системный лог:
$myCollection->load(false, true);
24. Применение стандартных практик в Magento
Запросы к базе данных
Mage::getModel('catalog/product')->getCollection()->load(true);
$model = Mage::getModel('catalog/product')->getCollection();
$sql = $model->getSelect()->__toString();
echo $sql;
SELECT `e`.* FROM `catalog_product_entity` AS `e`
25. Применение стандартных практик в Magento
Запросы к базе данных
Записываем все запросы в var/debug/pdo_mysql.log
lib/Varien/Db/Adapter/Pdo/Mysql.php:
protected $_debug = true;
protected $_logAllQueries= true;