Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 12.11.2017 14:38:41

В какой последовательности принято записывать use

К примеру:

namespace App\Http\Controllers\Admin;

use \App\Classes\Models\User;
use \App\Classes\Models\Payment;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Config;
use Exception;
 

В какой последовательности записать? Какой тут принцип? Возможно сначала классы самой Laravel, а затем мои? Или еще как то?

Не в сети

#2 13.11.2017 14:37:00

Cruide
Откуда: Домодедово, Моск. Обл.
Сообщений: 14
Сайт

Re: В какой последовательности принято записывать use

Я обычно писал так:

namespace App\Http\Controllers\Admin;

use Exception;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Config;

use App\Classes\Models\User;
use App\Classes\Models\Payment;
use App\Http\Controllers\Controller;

1. Корень
2. Фрейм
3. Апп общее
4. Модуль

Когда начал писать под php7, стал писать в таком виде:

namespace App\Http\Controllers\Admin;

use Exception;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\{Validator, Auth, Config};

use App\Http\Controllers\Controller;
use App\Classes\Models\{User, Payment};

Классы, которые объявлены в корневом пространстве, я обычно не добавляю, а использую в виде \Exception...

 try {
     ...
 } catch( \Exception $e ) {
     ...
 }

Исключения только тогда, когда таково требование стилизации заказчика или компании с которой я работаю.

Не в сети

#3 13.11.2017 16:06:54

Re: В какой последовательности принято записывать use

В какой последовательности записать? Какой тут принцип? Возможно сначала классы самой Laravel, а затем мои? Или еще как то?

На самом деле некоторые IDE вообще сортируют use, поэтому особо изгаляться с порядком классов нет, если в команде будет/работает кто-то на такой IDE - все равно он будет перезатерт.

Когда начал писать под php7, стал писать в таком виде:
use Exception;
} catch( \Exception $e ) {

Будь внимателен, это код не для PHP 7.x, а для 5.x!

PHP 7+ это не Exception, а Throwable. Если нет задачи совместимости с 5.x, то просто заменяются все ссылки на Exception на Throwable (за исключением class ... extends Exception и throw new Exception). Если нужна совместимость, то обычно достаточно добавить перед catch Exception идентичный блок catch Throwable:

try {
... 
} catch (Throwable $e) {
... 
} catch (Exception $e) {
  // такой же код, как в catch Throwable
}

Не в сети

#4 15.11.2017 22:59:29

Re: В какой последовательности принято записывать use

Throwable.

Да 7-ка уже давно. Те лучше им все Exception заменить выходит?

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

Не в сети

#5 16.11.2017 00:47:10

Re: В какой последовательности принято записывать use

Да 7-ка уже давно. Те лучше им все Exception заменить выходит?

Да. Без Throwable ты не будешь ловить все ошибки.

До 7.0 Exception - базовый класс для всех исключений, а исключения почти не используются самим PHP (кроме некоторых модулей вроде PDO, которые могут выбрасывать исключения, например, при ошибке в SQL). Наравне с исключениями существует и второй механизм, унаследованный от PHP 3 - "ошибки" (errors). Это такая штука, которая не ловится try..catch в принципе, а только глобальным обработчиком set_error_handler(). В общем-то просто плохое наследие в языке и ничего больше.

Например, неверный аргумент в стандартную функцию типа substr([], ...) вызовет ошибку, а не исключение. Соответственно, catch (как и finally) в try { substr([], ...) } catch (...) будет полностью проигнорирован.

В 7.0 очень многие ошибки решили наконец причесать и заменить на исключения. Разработчики решили не создавать новый класс-наследник существующего Exception, а создать новый класс Error и сделать Error и Exception наследниками нового класса Throwable. Так как в 95% случаев в коде нет смысла в разделении на Exception и Error, то есть обрабатывать нужно любые проблемы - то и в catch (Exception), а не catch (Throwable) больше смысла нет.

Не в сети

#6 16.11.2017 00:58:40

Re: В какой последовательности принято записывать use

класса Throwable

Throwable - это интерфейс

Не в сети

Подвал раздела