За последние 24 часа нас посетили 20623 программиста и 1113 роботов. Сейчас ищут 410 программистов ...

Как получить значение из такой строки

Тема в разделе "PHP для новичков", создана пользователем Анатолийновичок, 30 сен 2021.

  1. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    PHP как отрабатывал так и отрабатывает без типизации, так как это слабо типизированный язык и именно режим работы без типизации для него и является нормальным просто ввиду его слабой типизации. И до реально строгой типизации ему еще очень далеко, так как внутри метода можно легко поменять тип значения, что в строго-типизированных языках не реально сделать. Пока это попытка упорядочить типы хоть как то хотя бы на входе/выходе. И до появления входящих-исходящих типов на методах об этой типизации никто никогда и не думал не смотря на declare, так как толку от нее было ну как то совсем мало. Разве что для тестирования ошибок. Реально это хоть как то стало нужно после PHP 7, когда этим занялись разработчики языка. А по факту - уже после PHP8 это можно пытаться хоть как то нормально внедрять для документирования и контроля входящих/исходящих типов. Но если тенденция внедрять этот стиль становится явной, то конечно лучше уже начинать внедрять эти штуки-дрюки. Я пока для себя вижу что это удобно для документирования, так как просто нельзя задокументировать другой тип входа/выхода, если он не поддерживается логикой, что по сравнению с докблоками конечно же более надежно. По факту иметь проблемы из за типов очень редко когда приходится в PHP, именно из за слаботипизированной структуры языка. И кстати как раз после введения строгой типизации в нынешнем виде этих проблем мне кажется добавится, так как компилятор уже не отработает тип самостоятельно, а будет ждать нужный тип на входе. В принципе я наверное начну у себя это внедрять в основном из-за более надежного документирования, но на новую ступень эволюции это конечно же никак не выведет.
     
    #26 musicman3, 3 окт 2021
    Последнее редактирование: 3 окт 2021
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Declare была, а вот возможности указывать скалярные типы для аргументов появилась только в семёрке.
    https://www.php.net/manual/ru/migration70.new-features.php
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Краткость — сестра таланта...
    Это тебе дает оправдание месить любой тип данных в коде, зная что умный PHP интерпретатор схавает кашу кое как ? o_O

    Лови
    PHP:
    1. Fatal error: Uncaught TypeError: sumOfInts():
    2. Argument #2 must be of type int, string given, called in
    PHP:
    1. <?php
    2.  
    3. declare ( strict_types = 1 );
    4.  
    5. // Принудительный режим
    6. function sumOfInts(int ...$ints)
    7. {
    8.     return array_sum($ints);
    9. }
    10.  
    11. var_dump(sumOfInts(2, '3', 4.1));

    я в а*уе от вас "программисты"
     
  4. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    И как часто у тебя проблемы с типами были в пхп? Ты понимаешь вообще что это в первую очередь СЛАБО-ТИПИЗИРОВАННЫЙ язык аху...нный ты программист, а ты из него хочешь получить строгую типизацию во всей красе и еще сказать что это единственный верный вариант а все вокруг идиоты? В какую сторону тебе молиться/поклоняться? У тебя че, уровень тестостерона растет после того как ты начинаешь себя выпячивать? Давай завязывай.
     
    #29 musicman3, 3 окт 2021
    Последнее редактирование: 3 окт 2021
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    @MouseZver А причём тут? В пятёрках так было нельзя, этот листинг это никак не опровергает. Как по мне, это шикарно, что без этого strict это сработает. Ну может когда-нибудь я напишу код, где действительно будет суперважно, чтоб пых не привёл типы к нужному, пока я с такой ситуацией не сталкивался. Поскольку в строгом режиме empty("0") === true, несмотря на строгий режим, я вообще в нём смысла не вижу.
     
    musicman3 нравится это.
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Действительно... вот и я думаю - с какого ты перепрыгнул на тему pack/unpack значений ( PHP 5.6 ), когда речь шла про строгую типизацию во всех версиях PHP :)

    Всегда, прикинь ? o_O
    И любой "программист", кто не поленится включить полное отображение всех своих косяков и ошибок, увидит.

    Но у тебя в духе "е6ать-копать":
    - Ааа... PHP слабо типизированный ! Ну и по*уй, будем трахаться как попало.
    Поэтому из этих
     
  7. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Соболезную. Какой же ты рукожоп... О процессор и оператива! Да помогите этому несчастному озарить свой разум.
     
    #32 musicman3, 3 окт 2021
    Последнее редактирование: 3 окт 2021
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Религиозный говнокодер ? Готов перчик o_O
    --- Добавлено ---
     
  9. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Бедняга. Думаю для тебя срать постами это достояние. Ну давай, напрягай место. Смешно как ты пыжишься. Где я могу купить билет на следующее твое выступление "Я - король PHP. Строго-типизированный PHP и точка. Вы все го...но"? А че, серьезно, на ютубе ты был бы в топах. Подумай.
     
    #34 musicman3, 3 окт 2021
    Последнее редактирование: 3 окт 2021
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Пирожки горячие, сдобные, пышные... Налетай ! только что с горячего батхерта, говнокодера @musicman3

    3e796c4be32574c9751fe254c0ac38264de34f1e7c424a932d477ddd4b2bd7f1.jpg
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Указывать скалярные типы параметров появились в 7 версии, до 7 нельзя было написать int $arg в параметрах. По-моему, в 5.3 стало можно писать класс/интерфейс и array. И про какую тогда строгую типизацию может идти речь?
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Я знаю что PHP не идеален был в прошлом. Сейчас что в 2к21 так же на php5 сидим ?
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Не сидим. Но и бросаться в строгую типизацию только потому, что она появилась в языке, не стоит. И говорить, что если dictrict не включён, то это говнокод. В конце концов, от динамической типизации, слава Богу, отходить не собираются, возможность указания нескольких типов тому в подтверждение. Для меня именно отсутствие строгой типизации (ну или возможность её не включать) - главный кайф в PHP и JS по сравнению с другими языками. Я так же люблю магию в PHP, создание экземпляров классов из строки (чего, к примеру, в Java избегают, хотя она тоже так умеет - философия строгой типизации), вообще все эти прикольные, хотя и не явные штуки.
     
    musicman3 нравится это.
  14. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    От до чего доводит строгая типизация и посты.... А был нормальным человеком....
     
  15. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Это твой окончательный аргумент и будем продолжать давать мега советы говнокодинга на этом форуме ? o_O

    по примеру поста:
    https://php.ru/forum/threads/kak-poluchit-znachenie-iz-takoj-stroki.94904/#post-647534


    Ой.. Это кто там из-за угла тявкает ? Внимание значит тебе не уделяют... огнетушитель ща вставлю ;)
     
  16. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Мусье знает толк в извращениях....
     
  17. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    845
    Симпатии:
    130
    Имелось в виду, что строгая типизация помогает избежать ошибок в первую очередь юным падаванам, где Вы там обращение к себе высмотрели или восхваление какое, я хз. Остальное под спойлером, ибо оффтоп.
    Своего "Спектрума" у меня не было, а в гостях много не напрограммируешь. Потому спаял в КЮТ'е "Специалист" (конечно, попроще, чем "Спектрум", i8080 (точнее, его советский аналог КР580ВМ80А, чёрно-белый графоний)). А так-то и на Россию по программированию в 93-м катался, и на ЛШЮП как-то выиграл конкурс, в котором надо было угадать три призовых места, поставив себя на второе. Не будем возрастом меряться, это не наша заслуга, а родителей всё-таки )
     
    musicman3 нравится это.
  18. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    О, свой человек. Вижу что в теме. Мое почтение. Вероятно я не так понял контекст с падаваном, но Вы разъяснили и все стало по местам. Думаю мы как взрослые люди друг друга поймем и обид не будет.
     
  19. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    В общем теперь я должен стать на ступень выше эволюции всего то за несколько дней. То бишь перевел все 76 классов на строгую типизацию. Для этого мне понадобились некие скрытые знания, и теперь я вероятно маг нового уровня.

    А теперь по делу.

    Минусы:
    Теперь стало гораздо больше проблем с типами чем раньше, так как все типы теперь контролируются вручную. То есть прошу заметить - проблем не меньше, а больше. Где-то к примеру вместо int я дал на вход string, и тут же вылазит ошибка. Я должен сам это контролировать. Т.е. до внедрения строгой типизации проблем с типами не было вообще, ну или очень редко.... Сейчас же мы всю работу с типами делаем вместо компилятора сами. Но в целом можно привыкнуть и после того как проект будет переведен на строгую типизацию, то написание нового кода не должно быть прямо таки сложным. Выдаст ошибку, и правишь как нужно тип. Т.е. добавятся ошибки по типам, которые нужно учитывать.

    Плюсы:
    О них я говорил выше. Прежде всего это точная документация. Теперь нельзя перепутать типы параметров на функциях и записать не тот тип в документацию. Если тип окажется не верным, то выдаст ошибку. Таким образом документация четко соответствует типам, что имеет явное преимущество перед доблоками. Теперь всегда можно в IDE через документацию глянуть какие типы на входах/выходах и быть уверенным в этих значениях, в отличие от докблоков. В принципе я только из-за этого и взялся за эти типы. Кому не нужна документация на методы, то и смысла нет в строгой типизации.

    Но простите, где же моя новая ступень эволюции? Эй, кто подскажет? Я не ощущаю...
     
  20. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Тем не менее спасибо и @MouseZver, так как тема из json перешла на типизацию, а это натолкнуло меня применить ее для документирования. Какой бы срач не был, но в нем есть и хорошее зерно.
     
  21. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Просто посмотри как это выглядит, программируя объектно-ориентированным стилем

    PHP:
    1. <?php
    2.  
    3. declare ( strict_types = 1 );
    4.  
    5. namespace Nouvu\Web\Components\Security\Core\User;
    6.  
    7. use Symfony\Component\Security\Core\User\UserProviderInterface;
    8. use Symfony\Component\Security\Core\User\UserInterface;
    9. use Symfony\Component\Security\Core\Exception\UserNotFoundException;
    10. use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
    11. use Nouvu\Web\Foundation\Application AS App;
    12. use Nouvu\Resources\Entity\User;
    13.  
    14. class DatabaseUserProvider implements UserProviderInterface
    15. {
    16.     public function __construct ( private App $app )
    17.     {
    18.      
    19.     }
    20.  
    21.     public function loadUserByUsername( string $username ): User
    22.     {
    23.         return $this -> getUser( $username );
    24.     }
    25.  
    26.     /* public function loadUserByIdentifier( ... ): User
    27.     {
    28.      
    29.     } */
    30.  
    31.     private function getUser( string $username ): User
    32.     {
    33.         $DatabaseRequestInterface = $this -> app -> repository -> get( 'query.database.select.users_username|email' )( name: $username );
    34.      
    35.         if ( $DatabaseRequestInterface -> count() )
    36.         {
    37.             $user = new User;
    38.          
    39.             $this -> app -> repository -> get( 'auth.entity.user' )
    40.                 -> call( $user, ...$DatabaseRequestInterface -> get( $DatabaseRequestInterface :: FETCH_ASSOC ) );
    41.          
    42.             return $user;
    43.         }
    44.      
    45.         $exception = new UserNotFoundException( sprintf ( 'Username \'%s\' not found in the database.', $username ) );
    46.      
    47.         $exception -> setUsername( $username );
    48.      
    49.         throw $exception;
    50.     }
    51.  
    52.     public function refreshUser( UserInterface $user ): User
    53.     {
    54.         if ( $user instanceof User )
    55.         {
    56.             return $this -> getUser( $user -> getUsername() );
    57.         }
    58.      
    59.         throw new UnsupportedUserException( sprintf ( 'Instances of \'%s\' are not supported.', $user :: class ) );
    60.     }
    61.  
    62.     public function supportsClass( string $class ): bool
    63.     {
    64.         return User :: class === $class;
    65.     }
    66. }
    --- Добавлено ---
    PHP:
    1. <?php
    2.  
    3. declare ( strict_types = 1 );
    4.  
    5. namespace Nouvu\Container;
    6.  
    7. use Psr\Container\ContainerInterface;
    8. use Closure;
    9.  
    10. final class Container implements ContainerInterface
    11. {
    12.     private array $container = [];
    13.    
    14.     public function set( string $name, Closure $closure ): void
    15.     {
    16.         $this -> container[$name] = $closure;
    17.     }
    18.    
    19.     public function get( string $name ): mixed
    20.     {
    21.         $this -> has( $name ) ?: throw new ContainerException( $name );
    22.        
    23.         if ( $this -> container[$name] instanceof Closure )
    24.         {
    25.             $this -> container[$name] = $this -> container[$name]( $this );
    26.         }
    27.        
    28.         return $this -> container[$name];
    29.     }
    30.    
    31.     public function has( string $name ): bool
    32.     {
    33.         return isset ( $this -> container[$name] ) || array_key_exists ( $name, $this -> container );
    34.     }
    35.    
    36.     public function make( string $name, array $params = [] ): mixed
    37.     {
    38.         if ( ! $this -> has( $name ) )
    39.         {
    40.             $this -> set( $name, fn( ContainerInterface $ContainerInterface ): mixed => new $name( ...$params ) );
    41.         }
    42.        
    43.         return $this -> get( $name );
    44.     }
    45. }
     
    #46 MouseZver, 7 окт 2021
    Последнее редактирование: 7 окт 2021
  22. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Для сравнения из моего:

    PHP:
    1. <?php
    2.  
    3. /* =-=-=-= Copyright © 2018 eMarket =-=-=-=
    4.   |    GNU GENERAL PUBLIC LICENSE v.3.0    |
    5.   |  https://github.com/musicman3/eMarket  |
    6.   =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
    7.  
    8. declare(strict_types=1);
    9.  
    10. namespace eMarket\Core;
    11.  
    12. use eMarket\Core\{
    13.     Pdo,
    14.     Settings,
    15.     Valid
    16. };
    17. use \eMarket\Catalog\{
    18.     Cart
    19. };
    20.  
    21. /**
    22. * Class for user authorization
    23. *
    24. * @package Core
    25. * @author eMarket Team
    26. * @copyright © 2018 eMarket
    27. * @license GNU GPL v.3.0
    28. *
    29. */
    30. class Authorize {
    31.  
    32.     public static $customer;
    33.     public static array $csrf_token = [];
    34.  
    35.     /**
    36.      * Constructor
    37.      *
    38.      */
    39.     public function __construct() {
    40.         $exceptions = FALSE;
    41.  
    42.         if (strrpos(Valid::inSERVER('REQUEST_URI'), 'controller/admin/blanks/')) {
    43.             $exceptions = 'blanks';
    44.         }
    45.  
    46.         if (Settings::path() == 'admin' && Valid::inGET('route') != 'login' && !$exceptions) {
    47.             session_start();
    48.             $this->csrfVerification();
    49.             $this->admin();
    50.         }
    51.  
    52.         if (Settings::path() == 'catalog' && !$exceptions) {
    53.             session_start();
    54.             $this->csrfVerification();
    55.             $this->catalog();
    56.             new Cart();
    57.         }
    58.  
    59.         if (Settings::path() == 'install' && !$this->installVerify()) {
    60.             exit;
    61.         }
    62.     }
    63.  
    64.     /**
    65.      * Checking for install
    66.      * Thanks to alexanderpas (https://github.com/alexanderpas)
    67.      *
    68.      * @return bool TRUE/FALSE
    69.      */
    70.     private function installVerify(): bool {
    71.         if (file_exists(getenv('DOCUMENT_ROOT') . '/storage/configure/configure.php') && file_exists(getenv('DOCUMENT_ROOT') . '/.htaccess')) {
    72.             return FALSE;
    73.         }
    74.         return TRUE;
    75.     }
    76.  
    77.     /**
    78.      * CSRF Token
    79.      *
    80.      * @return string CSRF token
    81.      */
    82.     public static function csrfToken(): string {
    83.  
    84.         if (!isset(self::$csrf_token[Settings::path()])) {
    85.             self::$csrf_token[Settings::path()] = Func::getToken(32);
    86.             $_SESSION['csrf_token_' . Settings::path()] = self::$csrf_token[Settings::path()];
    87.         }
    88.         return self::$csrf_token[Settings::path()];
    89.     }
    90.  
    91.     /**
    92.      * CSRF Verification
    93.      *
    94.      */
    95.     private function csrfVerification(): void {
    96.  
    97.         if (Valid::isPOST()) {
    98.             if (!Valid::inPOST('csrf_token') || Valid::inPOST('csrf_token') != $_SESSION['csrf_token_' . Settings::path()]) {
    99.                 exit;
    100.             }
    101.         }
    102.         if (Valid::isPostJson()) {
    103.             if (!Valid::inPostJson('csrf_token') || Valid::inPostJson('csrf_token') != $_SESSION['csrf_token_' . Settings::path()]) {
    104.                 exit;
    105.             }
    106.         }
    107.     }
    108.  
    109.     /**
    110.      * Demo mode init
    111.      *
    112.      */
    113.     private function demoModeInit(): void {
    114.         if (isset($_SESSION['login'])) {
    115.             $staff_permission = Pdo::getValue("SELECT permission FROM " . TABLE_ADMINISTRATORS . " WHERE login=?", [$_SESSION['login']]);
    116.             if ($staff_permission != 'admin') {
    117.                 $mode = Pdo::getValue("SELECT mode FROM " . TABLE_STAFF_MANAGER . " WHERE id=?", [$staff_permission]);
    118.                 if ($mode == 1) {
    119.                     Valid::$demo_mode = TRUE;
    120.                 }
    121.             }
    122.         }
    123.     }
    124.  
    125.     /**
    126.      * Dashboard check
    127.      *
    128.      */
    129.     private function dashboardCheck(): void {
    130.         if (isset($_SESSION['login'])) {
    131.             $staff_permission = Pdo::getValue("SELECT permission FROM " . TABLE_ADMINISTRATORS . " WHERE login=?", [$_SESSION['login']]);
    132.             if ($staff_permission != 'admin') {
    133.                 $staff_data = json_decode(Pdo::getValue("SELECT permissions FROM " . TABLE_STAFF_MANAGER . " WHERE id=?", [$staff_permission]), 1);
    134.                 $count = 0;
    135.                 foreach ($staff_data as $value) {
    136.                     if ($value == '?route=dashboard') {
    137.                         $count++;
    138.                     }
    139.                 }
    140.                 if ($count == 0) {
    141.                     unset($_SESSION['login']);
    142.                     unset($_SESSION['pass']);
    143.                     header('Location: ?route=login');
    144.                 }
    145.             }
    146.         }
    147.     }
    148.  
    149.     /**
    150.      * Session authorization for Admin Panel
    151.      *
    152.      * @return bool TRUE
    153.      */
    154.     private function admin(): bool {
    155.  
    156.         $this->demoModeInit();
    157.         $this->dashboardCheck();
    158.  
    159.         if (isset($_SESSION['session_start']) && (time() - $_SESSION['session_start']) / 60 > Settings::sessionExprTime()) {
    160.             unset($_SESSION['login']);
    161.             unset($_SESSION['pass']);
    162.             unset($_SESSION['session_start']);
    163.             $_SESSION['session_page'] = Valid::inSERVER('REQUEST_URI');
    164.             header('Location: ?route=login');
    165.             exit;
    166.         }
    167.         $_SESSION['session_start'] = time();
    168.  
    169.         if (!isset($_SESSION['login'])) {
    170.             unset($_SESSION['login']);
    171.             unset($_SESSION['pass']);
    172.             $_SESSION['session_page'] = Valid::inSERVER('REQUEST_URI');
    173.             header('Location: ?route=login');
    174.             exit;
    175.         } elseif (isset($_SESSION['login']) && isset($_SESSION['pass'])) {
    176.             $_SESSION['DEFAULT_LANGUAGE'] = Pdo::getValue("SELECT language FROM " . TABLE_ADMINISTRATORS . " WHERE login=? AND password=?", [
    177.                         $_SESSION['login'], $_SESSION['pass']
    178.             ]);
    179.         } else {
    180.             $_SESSION['DEFAULT_LANGUAGE'] = Settings::basicSettings('primary_language');
    181.         }
    182.  
    183.         return TRUE;
    184.     }
    185.  
    186.     /**
    187.      * Session authorization for Catalog
    188.      *
    189.      * @return bool TRUE|FALSE
    190.      */
    191.     private function catalog(): bool {
    192.  
    193.         if (isset($_SESSION['email_customer'])) {
    194.             $customer_data = Pdo::getAssoc("SELECT * FROM " . TABLE_CUSTOMERS . " WHERE email=?", [$_SESSION['email_customer']])[0];
    195.         } else {
    196.             $customer_data['status'] = 0;
    197.         }
    198.  
    199.         if (isset($_SESSION['customer_session_start']) && (time() - $_SESSION['customer_session_start']) / 60 > Settings::sessionExprTime() || $customer_data['status'] == 0) {
    200.             unset($_SESSION['password_customer']);
    201.             unset($_SESSION['email_customer']);
    202.             unset($_SESSION['customer_session_start']);
    203.             return FALSE;
    204.         }
    205.         $_SESSION['customer_session_start'] = time();
    206.  
    207.         if (!isset($_SESSION['email_customer'])) {
    208.             self::$customer = FALSE;
    209.         } else {
    210.             self::$customer = $customer_data;
    211.         }
    212.  
    213.         return TRUE;
    214.     }
    215.  
    216.     /**
    217.      * Password hashing
    218.      *
    219.      * @param string Password
    220.      * @return string $password Hash
    221.      */
    222.     public static function passwordHash(string $password): string {
    223.  
    224.         if (HASH_METHOD == 'PASSWORD_DEFAULT') {
    225.             $options = ['cost' => 10];
    226.             $METHOD = PASSWORD_DEFAULT;
    227.         }
    228.         if (HASH_METHOD == 'PASSWORD_BCRYPT') {
    229.             $options = ['cost' => 10];
    230.             $METHOD = PASSWORD_BCRYPT;
    231.         }
    232.         if (HASH_METHOD == 'PASSWORD_ARGON2I') {
    233.             $options = ['time_cost' => 2];
    234.             $METHOD = PASSWORD_ARGON2I;
    235.         }
    236.         $password_hash = password_hash($password, $METHOD, $options);
    237.  
    238.         return $password_hash;
    239.     }
    240.  
    241. }
    Те же яйца только в профиль. В целом уже перепилил все, так что назад дороги нет. Для доков удобно конечно, но в целом тот еще гемор.

    Да и можно кстати тебе удобнее сделать USE через массив (особенно когда много по одному пути), но это дело вкуса:

    PHP:
    1. //Было
    2. use Symfony\Component\Security\Core\User\UserProviderInterface;
    3. use Symfony\Component\Security\Core\User\UserInterface;
    4. use Symfony\Component\Security\Core\Exception\UserNotFoundException;
    5. use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
    6.  
    7. //Стало
    8. use Symfony\Component\Security\Core\User\{
    9.     UserProviderInterface,
    10.     UserInterface
    11. };
    12.  
    13. use Symfony\Component\Security\Core\Exception\{
    14.     UserNotFoundException,
    15.     UnsupportedUserException
    16. };
    Комментов тоже считай нет для IDE по докблокам (описание класса и методов). Но основное можно взять как раз из типизации. У каждого свой стиль. Нормально так вроде бы. Надеюсь в обсиралово не перерастем.
     
    #47 musicman3, 8 окт 2021
    Последнее редактирование: 8 окт 2021
  23. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Единственный момент этой фигни, это сокращение строк, но дело привычки.
    PHP:
    1. use Symfony\Component\HttpFoundation\{ Request, Response };
    2. use Nouvu\Web\View\Builder\Content;
    3. use Nouvu\Web\View\Repository\{ CommitRepository, HeadRepository, TitleRepository };
    4. use Nouvu\Web\Component\Config\Repository;

    отдельная история
     
    musicman3 нравится это.