Всем привет. Так вот, насчет вброса. Цитата из вики - "известный противник венгерской нотации - Линус Торвальдс". Цитата Торвальдса - «Вписывание типа переменной в её имя (так называемая венгерская нотация) ущербно — компилятор и так знает типы и может проверить их, и это запутывает программиста». Я с ним согласен, если мы имеем дело с C, C++, Java и т.п. (не берем node, там своя, отдельная идея от человечества, имхо, сколько с ней работаю)) ) А вот лично я работаю уже 10 лет с PHP и иже с ними. Сейчас использую PHP7, и все свои разработки стараюсь перевести туда же. Отступая.. меня, наверное, побудила этот пост написать сегодняшняя ситуация - когда я раскопал метод Yii2 PHP: Controller::bindActionParams(). Там все хорошо, кроме контроля типов. Понятно, что когда мы передаем через браузер site.com/site/action?id=30, 30 будет в первую очередь строкой. А уже потом (int)30. Если мы сами так сделаем. Но - даже если мы пишем PHP: public function actionUpdate(int $id, bool $bIsDemo) передавая в адресной строке $id = 30.0, $bIsDemo = 1 - получим TypeError. Это в лучшем случае. Понятно, что данная обработка лежит полностью на разработчике, в данном случае, на мне. Что я и переписал с контролем типов с использованием Reflection. Но вот в чем смысл - пока есть неоднозначные ситуации. Пока есть не PHP: public function getUser(int $userId) // mixed вместо PHP: public function getUser(int $userId) : User // User or throw exception разработчик хотя бы может отследить суть переменной, исходя из префикса. Потому что, как видно из кода всяких битриксов, магенто, куби и т.п., которые используют округление в стиле PHP: $amount = (int)($amount * 100) или наоборот PHP: $amount = (float)($amount / 100) Будет треш. На мой взгляд, правильнее оформлять переменную с префиксом, как-то: PHP: $aData = []; $oUser = new User; $bIsDemo = true; $fAmount = 0.1; $iAmount = 10; и т.п. Как считаете, форумчане?
IMHO, венгерская нотация это всё-таки голос из могилы это нормально. более того, если твои функции не по 200+ строк, то ты не успеешь забыть что $amount у тебя целый. префикс не нужен.
скорее нормально было бы вот так: PHP: $amount = (int)$amount * 100 а на текущий момент там бомба часовая как раз с типом.
$amount *100 заставляет пхп считать $amount числом. затем результат тайпкастится к целому . что тут может быть неправильно понято? имхо бомбы тут нет, всё прозрачно. бомба бывает в сравнениях, когда переменная строкового типа сравнивается с числом. вот там нежданчики!
я никоим образом не говорю про пых 7.0, и 7.1. там уже более-менее понятно. но когда тот же yii2 придет еще к контролю типов и контролю возвращаемых значений. я собстно о чем. когда метод возвращает array|false|null, как в том же yii это возлюблено - не лучше ли использовать в таких случаях префикс (mixed) - $mData, раз уж проверять нужно.
а какой смысл в этом? ну навёл ты мышку на метод, увидел всё, что он вовзращает и что требует. Зачем ещё префикс?
шторм даже с указанием пхп 7.0 в качестве движка возвращает до сих пор при указании public function myFunction(string $str) : float{} как string|string и float|float. хотя, конечно, это уже к шторму относится. в общем, мне просто хотелось узнать мнение окружающих. опять-таки, я никого не агитирую.
мой стиль таков, что мне это не катит. Я могу одну переменную и строкой иметь, и в неё же массив спарсить. Я стараюсь не писать методы длиннее 30-50 строк никогда, и типа они на одном экране норм читаются и так, без подсказок. Если я буду имя типизировать, то у меня некоторые переменные больше двух строк не проживут, нафик надо.