Skip to content

Instantly share code, notes, and snippets.

@mikkabond
Last active March 10, 2020 19:10
Show Gist options
  • Save mikkabond/dd9364d6f7c95caf554001404bd5d477 to your computer and use it in GitHub Desktop.
Save mikkabond/dd9364d6f7c95caf554001404bd5d477 to your computer and use it in GitHub Desktop.
php tips and snippets
//подробный форматированный вывод переменных
$name_of_var = var_value;
var_dump($name_of_var);
//установить runtime настройку на время выполнения скрипта
ini_set
//настройка xdebug для vscode при использовании OpenServer
1) редактируем/раскомментируем в C:\OSPanel\userdata\config\PHP_7.1-x64_php.ini следующие строки:
zend_extension = php_xdebug.dll
[xdebug]
xdebug.default_enable = on
xdebug.idekey = "VSCODE"
xdebug.gc_stats_output_dir = "%sprogdir%/userdata/temp/xdebug"
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir = "%sprogdir%/userdata/temp/xdebug"
xdebug.profiler_output_name = "cachegrind.out.%p"
xdebug.remote_autostart = on
xdebug.remote_enable = on
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.remote_log = "%sprogdir%/userdata/temp/xdebug/xdebug.log"
xdebug.remote_port = 9000
xdebug.trace_output_dir = "%sprogdir%/userdata/temp/xdebug"
2) перезапускаем OpenServer
3) в VSCODE на панели отладки выбираем профиль "Listen for XDebug", ставим брейкпоинт в нужном месте кода
4) обновляем требуемую страницу сайта и вываливаемся в vscode на брейкпоинте
p.s. еще на эту тему https://www.codewall.co.uk/debug-php-in-vscode-with-xdebug/
// Добавлять в отчет все ошибки PHP
error_reporting(-1);
// Скрыть все ошибки
error_reporting(0);
//добавить HTTP заголовок (в примере указана кодировка выводимого в браузер текста) в самом наачале скрипта (до любого вывода)
header("Content-type: text/html; charset=utf-8");
//перехват буфера вывода для вывода информации, например, от phpinfo
ob_start( );
phpinfo( );
$output = ob_get_clean( );
//какие модули подключеныв интерпретаторе
> php.exe -m
//путь к файлу конфигурации php
> php.exe -r 'echo php_ini_loaded_file();'
//все предопределенные константы (включая подключенные модули)
echo '<pre>';
echo print_r(get_defined_constants(), true);
echo '</pre>';
// вывести все подключенные расширения интерпретатора
get_loaded_extensions();
//кол-во байтов оперативной памяти, занимаемые скриптом
memory_get_usage()
// задать опцию конфигурации php (доступно не для всех опций)
ini_set('option_name', option_value);
// получить все настройки интерпретатора
ini_get_all()
// variables_order='EGPCS' - переменная ini , которая отвечает за наполняемость массивов $_ENV, $_GET, $_POST, $_COOKIE, $_SERVER
// наличие буквы в настройке отвечает за наполняемость соответствующего массива
//переменные окружения (и соответствующий массив $_ENV) можно использвать для конфигурации среды(тест, отладка, продакшен), задания паролей, адресов и т.п.
//error_log - php.ini директива для указания, куда писать журнал ошибок
//display_errors - php.ini директива для включения или отключения вывода ошибок в стандартный поток (в браузер)
//composer:
>php composer.phar --version #запуск менеджера пакетов (composer.phar скачать с официального сайта)
>composer --version #запуск менеджера пакетов, если он установлен автоматически
composer.json - файл конфигурации пакетного менеджера (располагается обычно в корне проекта)
composer install - установка пакетов, указанных в composer.json (команда выполняется в одной директории с composer.json)
>composer self-update #обновление самого composer
// конспект
1. class Foo extends Bar // класс Foo наследуется от Bar
2. class Foo extends Bar implements IBaz // класс Foo наследуется от Bar и реализует интерфейс IBaz
3. self::$var - доступ к статическому св-ву (константе) класса внутри класса
4. parent::метод() - вызов метод() из родительского класса (обычно вызов совершается в переопределенном методе потомка)
5. статические методы могут обращаться внутри себя только к статическим св-вам или константам
6. класс может наследоваться ТОЛЬКО от одного предка, но приэтом от многих интерфейсов
7. интерфейс - это класс со св-ми и методами без тела (т.е. блок кода {} отсутствует).
8. классы, реализующие интерфейс, ДОЛЖНЫ иметь реализации методов интерфейса (даже пустые)
9. у абстрактного класса не может быть экземпляров
10. spl_autoload_register - Регистрирует заданную функцию в качестве реализации метода __autoload()
и служит для загрузки множества классов из разных мест
11. namespace path\from\root - задаем пространство имен как путь от корня до папки с текщим файлом
12. use path\from\route - использование конкретрного пространства имен в текущем файле
13. use \path\to\classes\{class1,class2} - группировка классов, находящихся в одном месте
14. trait - это механизм обеспечения повторного использования кода в языках с поддержкой только одиночного наследования,
таких как PHP. Трейт предназначен для уменьшения некоторых ограничений одиночного наследования, позволяя разработчику
повторно использовать наборы методов свободно, в нескольких независимых классах и реализованных с использованием разных архитектур построения классов
15. static:: - позднее статическое связывание
16. $obj->method1()->method2() - цепочка вызовов методов
17. магические методы начинающиеся с __ вызываются неявно
18. instanceof - ключевое слово-оператор для теста объекта на принадлежность к классу
19. $classObj2 = clone $classObj1 - клонирование (создание независимой копии объекта)
20. list($x,$y) = [1,2] - способ создания переменных из массива
21. $var = function($args) use ($closured_var) {...} - анонимная функция замыкает переменную
22. trait в отличие от interface содержит методы с реализацией и используется, чтобы не реализовывать одини те же методы во всех реализующих интерфейс(ы) классах
23. namespaceName\doFoo() - вызов функции с использованием полного имени с пространством имен
24. use full\namespace\Foo as Foo - способ импортирования имен из пространств имен, чтобы сократить полное имя при последующих обращениях к классу
# === LARAVEL ===
> composer global about # информация о глобальном конфиге composer
> composer global require laravel/installer #установить laravel глобально с помощью composer
> laravel new project #создать проект project с созданием одноименной папки в декущей директории
> composer create-project --prefer-dist laravel/laravel project #создать проект project с созданием одноименной папки в декущей директории (альтернативный вариант)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment