Так как сейчас сезон отпусков и все загадывают желания, мне интересно, какие языковые функции вы бы хотели добавить в PHP? Я заинтересован в некоторых практических предложениях / пожеланиях для языка. Под практическим я подразумеваю:
- Что-то, что можно сделать практически (не: «Я бы хотел, чтобы PHP угадал, что означал мой код, и исправил бы ошибки для меня» или «Я хотел бы, чтобы любой код выполнялся менее чем за 5 мс»)
- Что-то, что не требует изменения PHP на другой язык (не: «Я хотел бы, чтобы они сбрасывали знаки $ и использовали вместо скобок пробел» или «Я хотел бы, чтобы PHP был скомпилирован, статически типизирован и имел # в своем имени»)
- Что-то, что не потребовало бы разрушения всего существующего кода (не: «Давайте переименуем 500 функций и изменим порядок параметров для них»)
- То , что делает изменения языка или какой - нибудь интересный аспект этого (не: «Я хотел было расширение поддержки для протокола XYZ» или «Я хочу ошибка # 12345 окончательно фиксируется»)
- Кое-что, что является чем-то большим, чем напыщенная речь (не: «Я бы хотел, чтобы PHP так плохо не сосал»)
У кого-нибудь есть добрые пожелания?
Редактирование мода: Станислав Малышев является основным разработчиком PHP.
Ответы:
Я не возражаю против именованных параметров.
К сожалению, разработчики PHP уже отказались от этой идеи .
источник
[]
оператор JavaScript ) был бы полезен .Больше разыменования:
Другие упоминали именованные параметры и более короткий синтаксис массива. Я также не возражаю против более короткого синтаксиса объектов.
источник
function something_that_returns_array() { return array( 'a', 'b', 'c', 'd', 'e' ); }
()->
синтаксисом заключается в том, что он работает только при возврате объекта, что еще хуже, у объекта даже требуется свойство / метод с указанным именем, которое, оптимально, делает то, на что вы надеетесь , принимая параметры, которые вы ему задали, и молясь, чтобы это больше не требовалось ... и т. д. и т. п.После работы с PHP в течение 13 лет и интенсивной работы с JS в течение 4 лет, я думаю, что PHP будет неплохо позаимствовать у JS:
1) сокращенная запись для массивов и объектов. Я полагаю, что это, возможно, обсуждалось и было сбито на Internals (так что я слышу - мне не нравится видеть, как производится колбаса), но я действительно, действительно нахожу, что буквенная запись для массивов и объектов в JS является большой производительность выиграть.
Например:
Разве (ИМХО) просто намного легче написать и чище, чем
Я слышал, что возникла некоторая обеспокоенность по поводу возможной путаницы, но на самом деле, это более запутанно, чем, скажем, запись heredoc? По крайней мере, я думаю, что создание объекта stdClass в PHP достаточно многословно, чтобы препятствовать этой практике.
2) Возможность переопределить ранее определенные функции и методы была бы действительно полезной. Это, в частности, упростит ситуации, когда расширение класса и создание нового класса будут чрезмерно сложными или непрактичными. Я думаю, что нам следует избегать переопределения основных и не пользовательских функций и методов.
В дополнение к этим двум, я думаю, PHP должен прозрачно поддерживать Unicode . Это становится все более и более серьезной проблемой для разработчиков, и решения, предлагаемые в настоящее время в PHP, сбивают с толку и часто не работают. Создание всей стандартной функциональности строк в удобном для Unicode виде, было бы огромной победой для программистов PHP.
Спасибо за вопрос!
источник
Вещи, которые я хотел бы, как бывший давний апологет PHP:
some_array_method($argity, array('key' => $value));
. Я считаю, что это предложение, к сожалению, уже исчезло в списке рассылки PHP.finally
служба поддержкиAuthorizeAttribute
который будет указывать, что контроллер или метод действия требуют авторизации пользователя. Сам фреймворк будет отвечать за поиск атрибутов и соответственно на них действовать. Я полагаю, что PHPUnit уже использует своего рода атрибуты, помещая их в комментарии docblock, которые можно прочитать, используя отражение, но использование реальной функциональности в комментариях docblock, безусловно, является хаком.function($x){ return $x*2;}
, может быть, я мог бы написать$x => return $x*2
, или что-то еще. Это опять-таки просто что-то вроде перетаскивания, чтобы использовать эту функцию. Например,$results = array_filter(array(1,2,3), function($a) { return $a % 2; }):
против$results = array_filter(array(1,2,3), $a => return $a % 2 );
первого просто гораздо больше сантехники, что в основном не имеет отношения к реальной работе, которую вы пытаетесь выполнить.Decimal
(математика с фиксированной точкой), которая поддерживает математические операции через обычные операторы, была бы неплохой, так как у нас нет перегрузки операторов.источник
Сделайте PHP действительно объектно-ориентированным.
slap on another global function
Эволюция PHP должна закончиться.Мне трудно это читать. Я должен сделать свой собственный умственный стек и отчасти собрать его сам. В основном это следует читать в обратном порядке.
$dog->wakeup()->bark();
легко читать по сравнению сbark(wakeup($dog))
Вы сделали шаг к включению поддержки объекта / метода, теперь, пожалуйста, используйте его в реальных функциях ядра PHP.
Перенос этой функциональности на методы позволил бы их последовательно переименовывать. Не нарушит ли это обратную совместимость, если бы у строк и массивов были свои собственные методы?
источник
dog_wake_up($dog); bark_dog($dog);
Интегрированный в язык механизм запросов был бы хорош. Вроде как то, что доступно в .NET под названием LINQ. Это помогло бы сортировать массивные массивы данных и стандартизировать доступ к базам данных, чтобы было меньше успешных атак с использованием SQL-инъекций.
источник
Ой. Тип подсказки для примитивов. Это было бы чудесно.
источник
Я действительно желаю лучшей поддержки Unicode из коробки. Большинство языков движутся в этом направлении, но в PHP все еще есть странные команды.
http://blog.ginkel.com/2010/03/php-unicode-support-or-the-lack-thereof/
источник
Сделайте строковый объект похожим, со встроенными методами, чтобы заменить непоследовательно названные и параметризованные необъектные. например
и т.п.
Изменить: еще одна вещь: эти методы должны всегда ожидать и излучать UTF-8, за исключением тех, которые специально предназначены для работы с кодировками. Если ввод недействителен в формате UTF-8, должно быть сгенерировано исключение, даже если кодирование не повлияет на вывод функции.
источник
subject->verb(object)
, делает порядок параметров легче запомнить.is_object($string)
вернуться? Это либо сломало бы обратную совместимость, либо привело бы к введению действительно не интуитивных почти, но не совсем объектов.1) Я бы хотел, чтобы вновь созданные объекты возвращали «$ this», чтобы я мог цепочку методов, $ user = new User ('john') -> setLastName ('Doe') -> save ();
2) Если вы когда-либо использовали ruby и последний узел, у них есть отличная интерактивная оболочка (IRB). Я бы хотел, чтобы у PHP был такой, который был бы действительно полезен.
3) Черты / миксины, но я слышал, что они в пути.
4) Я хочу создать второй короткий массив $ myArray = ['my', 'array'];
5) Последовательное наименование / порядок (т.е. стог сена иглы)
источник
create()
метод, который не делает ничего особенного только для того, чтобы обойти # 1!1) Пожалуйста, избавьтесь от включает (). Ссылки на другие файлы должны быть ссылками, а не помещать содержимое одного файла исходного кода в другой. Слишком многие программисты PHP используют include () как тип вызова функции, а не как средство ссылки на библиотеку. Это приводит к разного рода неоднозначности в состоянии переменной и нестабильности кода. Замените это Perl-подобной командой use.
2) предоставьте готовый метод компиляции приложения PHP в один распространяемый файл байт-кода или исполняемый файл. Это значительно повысит привлекательность PHP как коммерческого языка разработки. Это должно быть основным компонентом языка. Не беспокойтесь о HTML-файлы, используемые для графического интерфейса приложения, потому что ...
3) избавьтесь от возможности вставлять теги PHP в HTML. Или, по крайней мере, обеспечить режим «без встраивания». Это абсолютный беспорядок и поощряет плохой дизайн, смешивая логику приложения и представление вместе. Разработчики должны использовать шаблоны для отображения, а не шлепать файлы PHP вместе и надеяться на лучшее.
Подпись,
GrandmasterB
PS: не слушайте то, что говорят здесь другие, я был хорош весь год
источник
Директива ini для
E_ERROR
неопределенных констант, а не для предположения, что это строка сE_NOTICE
.источник
E_ERROR
илиE_PARSE
.Нормализуйте глобальное пространство имен с помощью хорошо продуманного соглашения об именах, которое имеет смысл для новичков!
Процитируем нашего любимого Джеффа Этвуда: PHP - отстой, но это не важно !
источник
Строки должны быть объектами
источник
1) Сокращенный синтаксис массива / объекта, а-ля JavaScript (как упоминалось ранее)
2) Разрешить
const
переменные, чтобы позволить результат вычисления, как этоdefine()
делает.3) Цепочка напрямую от конструктора:
new User()->name('Ryan');
4) Разыменование массива:
something_that_returns_array()[4];
5) Расширенная поддержка SPL. SPL делает достойную работу по переосмыслению функций строк и массивов (среди прочего) как объектов. Расширение SPL могло бы решить множество проблем из-за того, что язык так дерзок.
6) Использование
ArrayObject()
должно быть таким же прозрачным, как и использованиеarray()
. Вы должны быть в состоянии делать вещи, какarray_filter($array_object_instance)
без делаarray_filter($array_object_instance->getArrayCopy())
. Даже лучше, конечно, было бы$array_object_instance->filter()
.7) Полный Unicode был бы хорош.
8) Прекратите делать странные автоматические преобразования типов. Например, вы не сможете
echo
использовать объект SimpleXMLElement без предварительного явного ввода его в виде строки. Или, по крайней мере, бросить что-нибудь, когда это произойдет (например, в строгом режиме или в любом другом режимеerror_reporting(-1)
).9) Поддержка нескольких потоков или каких-то четных / асинхронных обратных вызовов. Это наиболее важно при попытке загрузить большие файлы через cURL. Вместо веток старой школы, было бы неплохо что-то вроде Grand Central Dispatch от Apple. Или даже что-то вроде JavaScript, где вы можете делать асинхронные запросы и определять обратные вызовы.
10) Непротиворечивое именование / порядок (т.е. стог сена иглы) было бы неплохо, но я думаю, что это можно было бы лучше решить с помощью SPL.
11) Официально поддерживаемая интерактивная оболочка PHP, такая как IRB. У Facebook есть один,
phpsh
который был написан на Python, но ему не хватает того блеска, который я хотел бы увидеть.12) Для API Reflection добавьте поддержку (а) комментариев докблока для констант (глобальных и классов) и (б) поддержки анализа комментариев, похожих на PHPDoc, в разумную структуру данных. Есть пакет PECL под названием «docblock», который пытается это сделать, но не похоже, чтобы автор зашел очень далеко.
РЕДАКТИРОВАТЬ: 13) Я также хотел бы видеть возможность использовать
!
и?
в именах функций - как Руби может.источник
1) Понимание массива в стиле понимания списка Python:
2) Синтаксис короткого массива
3) Сделайте empty () не считать строку '0' верной
источник
empty()
является логической противоположностьюif ($x)
, поэтому имеет смысл, чтоempty('0')
это правда, потому чтоif ('0')
это ложь. Разница лишь в том,empty()
что не выдает уведомление, если переменная не установлена.Я хотел бы увидеть законный метод создания / определения массивов CONSTANT. Есть несколько хакерских способов симулировать такую функциональность, но было бы неплохо, если бы это была простая функция PHP. Было бы неплохо, если бы вы могли создать массив способом, аналогичным «окончательному» объявлению Java.
Я создал систему входа в систему, которая очень быстро настраивается. Все, что вам нужно сделать, это изменить содержимое массива в текстовом файле, чтобы указать поля, которые вы хотите для пользовательской информации. Используя цикл for, он обрабатывает все: от генерации форм и сенсибилизации ввода до вызовов базы данных, но все это зависит от этого исходного массива.
Файл с массивом заблокирован с разрешениями, но как только массив перемещается в эфире, он изменчив. Хотя я чувствую, что система довольно безопасна, мне не нравится оставлять что-либо на волю случая. Метод для завершения массивов был бы хорош для такой ситуации.
Новая идея!!
Оооо, я подумал о чем-то еще, что мне бы очень понравилось в php. Я хотел бы, чтобы какая-то система управляла операциями с файлами php и операциями с каталогами, аналогично тому, как работает .htaccess.
Файл .phpaccess должен запускать какую-то политику в отношении того же домена / источника.
Например, если бы я размещал много сайтов с виртуальными хостами, у меня мог бы быть файл .phpaccess в каталоге, который велел бы php проверять происхождение любых выполняемых сценариев, которые пытаются работать с моим защищенным каталогом. Если скрипт не пришел из этого каталога или его подкаталогов, то файловые операции / или операции сокетов будут отклонены.
Я думаю, что такая система сделает виртуальный хостинг намного безопаснее. Если бы вы могли разместить один из них в верхней части каждого виртуального хоста, это уменьшило бы вероятность того, что кто-то найдет способ проникнуть с соседнего виртуального хоста.
Кроме того, если было бы хорошо иметь метод защиты в обратном порядке. то есть, ограничение доступа сценариев в одном каталоге к этому каталогу.
Это Инь и Ян Я знаю!
источник
final
. Чтобы уточнить:final
означает, что значение переменной может быть установлено во время выполнения (в отличие от констант, которые должны быть константными выражениями), но может быть установлено только один раз. Смотрите также C #readonly
.Два моих самых больших желания как программиста на PHP:
источник
Синтаксис языка : в pihipi и phpreboot есть несколько хороших подсказок о том, что интересует разработчиков (хотя phpreboot заходит слишком далеко, превращаясь в JS).
Методология разработки . Это значительно увеличило бы срок службы PHP.net, если бы такие обзоры были действительно приняты во внимание. Не принимайте больше решений по синтаксису послеобеденного IRC-сеанса.
Индивидуальные особенности : некоторые упоминались ранее, но я с удовольствием сожгу некоторую карму, чтобы быть здесь слишком тупой:
str::toupper()
)\
синтаксис пространства имен , исправьте синтаксический анализатор и примите в::
качестве альтернативы. Вы знаете, как настоящий язык.Хотя, если это не очевидно, я бы с радостью финансировал кого-то другого, чтобы сделать последнее, и убил php.net в качестве основной реализации.
:P
О, только что заметил, это вики сообщества. Таким образом, есть шанс, что вы на самом деле здесь не ради кармы, а с неподдельным интересом. Если это так, посмотрите на <b> проблему </ b>, которая серьезно вредит языку (директориту).
источник
::
было бы более естественным для любого языка, близкого к синтаксису C / C ++. И `\` не только ненормальный среди всех языков программирования, но имеет непроверенную коннотацию. Некоторые предыдущие обсуждения: stackoverflow.com/questions/238550/… or developers.slashdot.org/article.pl?sid=08/10/26/1610259 и reddit.com/r/programming/comments/79cut/… - Но в в частности, принятие решения об этом без обратной связи и сигнал к тому, чтобы сообщество разработчиков смирилось с этим, было не очень желанным шагом.Я хотел бы видеть объединение ошибок и исключений в единую концепцию (исключения). Замечательно иметь возможность отлавливать исключения и записывать их в журнал, таким образом находить и исправлять ошибки. Но если есть что-то принципиально неправильное (читай: ошибка PHP) в пути к коду, который встречается очень редко, нет хорошего способа направить эту информацию в ту же базу данных проблем.
Пожалуйста, Санта, добавь в php.ini переключатель, который превращает все ошибки в исключения - в идеале, исключения, которые я могу уловить в своем коде.
источник
PHP мне подходит как раз для того, чтобы подгонять маленькие и средние сайты; Я, должно быть, немного не придумаю, единственное, что я могу придумать в качестве ответа на этот вопрос, это то, что делает его лучше масштабируемым для сайтов с высоким трафиком.
Я имею в виду создание процессов на других ядрах, например, обновление базы данных в одном процессе при создании страницы вывода в другом процессе. Быстрый поиск в Google показывает, что это можно смоделировать, но в настоящее время не поддерживается напрямую в php.
источник
Я действительно пропустил, что скалярные типы не обрабатываются как объекты, и реальные объекты не могут действовать как любой другой тип или объект (за исключением строки из-за __toString ()).
источник
источник
Очистите "Пользовательские заметки" на http://php.net . Иногда они действительно беспорядок, хотя в целом представляют большую ценность.
источник
В PHP есть несколько довольно приличных функций для работы с массивами, которые обеспечивают возможности обработки списков, обратные вызовы и
create_function()
базовое лямбда-исчисление.Основная проблема в том, что он слишком многословен в PHP, система сокращений была бы превосходной, особенно в том, что касается команд map / lower.
Что еще более важно, функции списка не полностью завершены:
foldr
функции,array_reduce()
обеспечиваетfoldl
array_map()
должен передать ключ во втором аргументе, какarray_walk()
это делаетarray_map_keys()
может быть полезным для ключевых измененийrange()
,array_fill()
иarray_fill_keys()
обрабатывать только так много дел, иarray_filter()
отдельноЯ не собираюсь превращать PHP в Haskell, но PHP часто используется для манипулирования структурой данных типа списка, и в этом отношении было бы полезно иметь полный набор инструментов.
источник
Перегрузка оператора:
источник
Добавлять исключения вместо создания E_WARNING ... Это очень раздражает, что я не могу использовать что-то вроде:
Конечно, в настоящее время это не очень практично, но очень неприятно получать:
ПРЕДУПРЕЖДЕНИЕ
ПРЕДУПРЕЖДЕНИЕ
ПРЕДУПРЕЖДЕНИЕ
и я не могу контролировать поток кода, не написав свой собственный обработчик ошибок и обработчик строк, какая ошибка была вызвана (разрешение, неправильное имя файла или что-то еще; я не против других источников ошибок здесь), чтобы выдать правильное исключение ,
Надеюсь, мне не нужно объяснять, почему это важно.
Некоторое время назад PHP стал объектно-ориентированным, и мы, программисты, использующие PHP, с нетерпением ждем OO-функций, а не вводим «goto» ... Когда я узнал, что это действительно произошло, я подумал, что это был апрельский день дурака.
источник
Объединить объектную модель - заставить все объекты расширять базовый класс объектов. Класс Object будет (среди прочего) реализовывать все магические методы (чтобы они больше не были магическими!)
Переместите расширения в свои собственные пространства имен - снимите загромождение с глобального пространства имен
$conn = new \MySQLi\Connection();
Отключите
spl_autoload()
функцию! Серьезно, это, возможно, одна из величайших возможностей PHP, а также самая бесполезная в то же время.spl_autoload
это автозагрузчик по умолчанию, который поддерживает пространства имен и несколько расширений файлов, но по неизвестной причине требует, чтобы имена файлов были в нижнем регистре. Для этого есть отчет об ошибке , но сотрудники ответили, что не исправят это из-за обратной совместимости. Правильно ... не каждый фреймворк поставляется с собственным автозагрузчиком, так как по умолчанию он поврежден!источник
Поддержка больших файлов. Довольно пожалуйста?
См. Http://bugs.php.net/bug.php?id=27792 (хотя может быть больше областей / функций, которые также требуют внимания).
источник
Обеспечьте поддержку taint до последней версии и включите ее в стандартные сборки, предпочтительно включенные в конфигурации по умолчанию http://wiki.php.net/rfc/taint
Это предотвратит атаки XSS и SQL-инъекциями, заставляя людей правильно кодировать.
источник