Я знаю, что это звучит как вопрос для обсуждения, но позвольте мне объяснить, откуда я.
Вне колледжа я устроился на работу в магазин PHP. Я работал там полтора года и думал, что я узнал все, что можно было узнать о программировании.
Затем я получил работу в качестве единоличного внутреннего разработчика в крупной корпорации, где вся работа была на C #. В своей приверженности этой должности я начал читать тонну блогов и книг и быстро понял, как неправильно я думал, что знаю все. Я узнал о модульном тестировании, внедрении зависимостей и шаблонах декораторов, принципе проектирования слабой связи, обсуждении композиции по наследованию и так далее, и тому подобное - я все еще очень сильно поглощаю все это. Излишне говорить, что мой стиль программирования полностью изменился за последний год.
Теперь я ловлю себя на том, что беру проект php, занимающийся кодированием для запуска друга, и я чувствую себя полностью ограниченным в отличие от программирования на C #. Меня действительно беспокоит, что все переменные в области видимости класса должны быть указаны путем добавления '$ this->'. Меня раздражает, что ни одна из IDE, которые я пробовал, не имеет очень хорошего интеллекта и что мои методы модульных тестов SimpleTest должны начинаться со слова «test». Это сводит меня с ума, что динамическая типизация мешает мне неявно указывать, какой тип параметра ожидает метод, и что вам нужно написать оператор switch для выполнения перегрузок метода. Я не могу смириться с тем, что вы не можете иметь вложенные пространства имен и должны использовать оператор :: для вызова конструктора базового класса.
Сейчас я не собираюсь начинать дебаты по PHP против C #, я хочу сказать, что я уверен, что есть некоторые функции PHP, о которых я либо не знаю, либо знаю, но не могу их использовать должным образом. Я нахожусь в своей вселенной C # и испытываю проблемы с видением за пределами стеклянной чаши.
Итак, я спрашиваю, какие ваши любимые функции PHP? Что вы можете сделать в этом, чего вы не можете или более сложны в языках .Net?
источник
Ответы:
Документация . Документация получает мой голос. Я не сталкивался с более подробной онлайн-документацией по языку программирования - все остальное, что мне нужно собрать из разных веб-сайтов и справочных страниц.
источник
Массивы . Судя по ответам на этот вопрос, я не думаю, что люди полностью понимают, насколько просты и полезны массивы в PHP. Массивы PHP действуют как списки, карты, стеки и общие структуры данных одновременно. Массивы реализованы в языковом ядре и используются повсеместно, что приводит к хорошей локализации кэша ЦП. И Perl, и Python используют отдельные языковые конструкции для списков и карт, что приводит к большему количеству копий и потенциально запутанным преобразованиям.
источник
[[1, 2], [3, 4]]
сравните это с PHP версии:array(array(1, 2), array(3, 4))
.Обработчики потоков позволяют расширять «файловую систему» с помощью логики, которую, насколько я знаю, довольно трудно сделать в большинстве других языков.
Например, с помощью обработчика потока MS-Excel вы можете создать файл MS Excel следующим образом:
источник
Магические методы - это резервные методы, которые вызываются, когда вы вызываете метод, который не существует, или присваиваете или считываете несуществующее свойство, среди прочего.
Здесь разработчик C ++ может заметить, что PHP позволяет перегружать некоторые операторы, например
()
или(string)
. На самом деле PHP позволяет перегружать еще больше, например,[]
оператор ( ArrayAccess ),foreach
языковая конструкция ( Iterator и IteratorAggregate ) иcount
функция ( Countable ).источник
__call()
велика в рамках с картой domain.com/controller/method/Стандартный класс аккуратный контейнер. Я узнал об этом только недавно.
Вместо использования массива для хранения нескольких атрибутов
Вы можете использовать стандартный класс
Это особенно полезно при доступе к этим переменным в строке
источник
У включаемых файлов может быть возвращаемое значение, которое вы можете назначить переменной.
источник
Вы можете воспользоваться тем, что
or
оператор имеет более низкий приоритет, чем=
сделать это:Если значение первого назначения оценивается как
true
, второе назначение игнорируется. Другой пример:источник
or
будет выполняться, если код доor
приводит к числовому значению0
. Так что семантически это может быть менее вероятно с чем-то вроде$_GET['page']
, но, очевидно, могут возникнуть обстоятельства, и это хорошо, чтобы не упустить.or
оператор является более ранней версией||
оператора. Кроме того, +1, потому что это очень выразительно, и я часто забываю, что это возможно. Его следует использовать чаще, и абсолютно ясно, что он делает. Я не знаю, как «настоящие мужчины» кодируют, хотя, поэтому я не могу комментировать это.__autoload()
(класс-) файлы с помощьюset_include_path()
.В PHP5 теперь нет необходимости указывать длинные списки операторов include_once при выполнении приличного ООП.
Просто определите небольшой набор каталогов, в которых разумно структурированы файлы библиотеки классов, и установите путь автоматического включения:
Теперь
__autoload()
рутина:Теперь PHP будет автоматически включать необходимые файлы по требованию, сохраняя время анализа и память.
источник
Лёгкость . Самая большая особенность заключается в том, как легко новым разработчикам сесть и написать «рабочие» сценарии и понять код.
Хуже всего то, как легко новым разработчикам сесть и написать «рабочие» скрипты и подумать, что они понимают код.
Открытость сообщества окружающего PHP и огромное количество PHP проектов , доступных как с открытым исходным кодом является гораздо менее пугающей для кого - то входит в мире развития и , как вы, может быть ступенька на более зрелых языках.
Я не буду обсуждать технические вещи, которые есть у многих до меня, но если вы посмотрите на PHP как на сообщество, а не на веб-язык, сообщество, которое явно охватило вас, когда вы начали разрабатывать, преимущества действительно говорят сами за себя.
источник
Переменные переменные и функции без сомнения!
То же самое относится и к параметрам объекта ($ some_object -> $ some_variable);
Очень очень хорошо. Сделать кодирование с помощью циклов и шаблонов очень легко, и это быстрее и более под контролем, чем eval (Спасибо @Ross & @Joshi Spawnbrood!). T
источник
Вы можете использовать функции с неопределенным числом аргументов, используя
func_get_args()
.источник
я люблю удаленные файлы . Для веб-разработки эта функция исключительно полезна.
Нужно работать с содержимым веб-страницы? Простой
и у вас есть готовый дескриптор файла, как и любой другой обычный файл.
Или как насчет чтения удаленного файла или веб-страницы прямо в строку?
Полезность этого метода трудно переоценить.
Хотите проанализировать удаленное изображение? Как насчет того, чтобы сделать это через FTP?
Почти любая функция PHP, которая работает с файлами, может работать с удаленным файлом. Вы можете даже
include()
илиrequire()
кодировать файлы удаленно таким образом.источник
strtr ()
Это очень быстро, так сильно, что вы будете поражены. Внутренне он, вероятно, использует некоторую сумасшедшую структуру типа b-дерева, чтобы упорядочить ваши совпадения по их общим префиксам. Я использую его с более чем 200 строк поиска и замены, и он все еще проходит через 1 МБ менее чем за 100 мс. Для всех, кроме тривиально небольших строк, strtr () даже значительно быстрее, чем strtolower (), делает то же самое, даже принимая во внимание набор символов. Вероятно, вы могли бы написать весь анализатор, используя последовательные вызовы strtr, и это было бы быстрее, чем обычное сопоставление с регулярным выражением, выяснить тип токена, вывести то или иное, следующий тип регулярных выражений.
Я писал нормализатор текста для разбиения текста на слова, нижнего регистра, удаления знаков препинания и т. Д., А strtr был моим швейцарским армейским ножом, он выбивал штаны из регулярных выражений или даже str_replace ().
источник
Одна не очень известная особенность PHP -
extract()
это функция, которая распаковывает ассоциативный массив в локальное пространство имен. Это, вероятно, существует для аблобинации автоглобалов, но очень полезно для шаблонов:Теперь вы можете использовать
render_template('index.html', array('foo' => 'bar'))
и только$foo
со значением"bar"
появляется в шаблоне.источник
Range () сам по себе не скрыт, но я все еще вижу много людей, повторяющих:
когда они могли бы использовать:
И вы можете делать простые вещи, как
источник
Read Loop
.Веб-пространство с поддержкой PHP обычно дешевле, чем что-либо с (asp) .net. Вы могли бы назвать это функцией ;-)
источник
static
Ключевое слово полезно за пределами ООП точки зрения. Вы можете быстро и легко реализовать «запоминание» или кэширование функций с помощью чего-то простого:static
Ключевое слово создает переменную , которая сохраняется только в рамках этой функции прошлом исполнения. Этот метод отлично подходит для функций, которые обращаются к базе данных, например,get_all_books_by_id(...)
илиget_all_categories(...)
которые вы бы вызывали более одного раза во время загрузки страницы.Предостережение: убедитесь, что вы нашли лучший способ сделать ключ для своего хэша. Почти в каждом случае
md5(...)
вышеприведенное НЕ является хорошим решением (проблемы со скоростью и длиной вывода), я использовал его в иллюстративных целях.sprintf('%u', crc32(...))
илиspl_object_hash(...)
может быть намного лучше в зависимости от контекста.источник
Одна приятная особенность PHP - это CLI . Это не так «рекламируется» в документации, но если вам нужны обычные скрипты / консольные приложения, использование cron + php cli очень быстро развивается!
источник
wget http://example.com...
Тогда "и печатать" трюк
Будет повторять бла, если $ flag равен true. НЕ РАБОТАЕТ С ЭХО.
Это очень удобно в шаблоне и заменить? : это не очень легко читать.
источник
Вы можете использовать минус в именах переменных следующим образом:
Зачем это использовать? Понятия не имею: может быть, для модели CSS? Или какой-то странный JSON, который вам нужно вывести. Это странная особенность :)
источник
$item->DataContent->body->{'body.content'}
.Синтаксис HEREDOC - моя любимая скрытая функция. Всегда трудно найти, потому что вы не можете Google для <<<, но это избавляет вас от необходимости избегать больших кусков HTML и все еще позволяет вам отбрасывать переменные в поток.
источник
Вероятно, не многие знают, что в качестве значений по умолчанию для параметров функции можно указать постоянные «переменные»:
Строки могут быть использованы, как если бы они были массивами :
источник
Единственная наиболее полезная вещь в PHP-коде - это то, что, если я не совсем понимаю функцию, которую я вижу, я могу посмотреть ее с помощью браузера и набрав:
В прошлом месяце я видел функцию «диапазон» в некотором коде. Это одна из сотен функций, которые мне никогда не удавалось использовать, но они оказались действительно полезными:
Этот URL является псевдонимом для http://us2.php.net/manual/en/function.range.php . Эта простая идея - сопоставить функции и ключевые слова с URL-адресами - потрясающая.
Я хотел бы, чтобы другие языки, фреймворки, базы данных, операционные системы имели простой механизм поиска документации.
источник
range()
может быть полезно дляforeach( range(1, 10) as $i) { };
PHP function
в адресной строке, он будет выполнять поиск Google «Мне повезет», и вы почти всегда попадете на нужную страницу документации php.Быстрая блокировка комментариев
Эти комментарии позволяют вам переключаться, если блок кода комментируется одним символом.
источник
// ...
строчные комментарии и/* ... */
блокирует комментарии./** /
до и/**/
после. Вы можете переключить блок, удалив и добавив пробел в первом. Это дает дополнительное преимущество работы с CSS (и другими языками, которые не поддерживают// ...
комментарии).Мой список ... большинство из них подпадают под "скрытые функции", а не "любимые функции" (надеюсь!), И не все они полезны, но ... да.
Вы также можете вкладывать троичные операторы, иногда это удобно.
Хорошо, я сейчас остановлюсь :-)
Хм, это было время ..
Итак, только что обнаружил, что вы можете передать любую строку в качестве имени метода, если вы заключите ее в фигурные скобки. Вы не можете определить какую-либо строку как метод увы, но вы можете перехватить их с помощью __call () и обрабатывать их по мере необходимости. Хммм ....
Нашел этот маленький драгоценный камень в комментариях Reddit:
Вы не можете вызывать функции внутри {} напрямую, как это, но вы можете использовать переменные-удерживающие-имя-функции и вызывать их! (* и * вы также можете использовать переменные переменные)
источник
${''} = 456;
хахаха .... довольно издевательства.Манипуляция массивом.
Тонны инструментов для работы с массивами и манипулирования ими. Возможно, он не уникален для PHP, но я никогда не работал с языком, который делал это так просто.
источник
Я немного похож на вас, я кодирую PHP более 8 лет. Я должен был пройти курс .NET / C # около года назад, и мне очень понравился язык C # (ненавистный ASP.NET), но он сделал меня лучшим разработчиком PHP.
PHP как язык довольно беден, но я очень быстр в этом, и стек LAMP потрясающий. Конечный продукт намного перевешивает сумму частей.
Тем не менее, в ответ на ваш вопрос:
http://uk.php.net/SPL
Я люблю SPL , класс коллекций в C # мне понравился, как только я начал с ним. Теперь я могу взять свой пирог и съесть его.
Андрей
источник
Я немного удивлен, что никто еще не упомянул об этом, но один из моих любимых приемов с массивами - использование оператора плюс. Это немного похоже,
array_merge()
но немного проще. Я обнаружил, что обычно это то, что я хочу. По сути, он берет все записи в RHS и заставляет их появиться в копии LHS, перезаписывая по мере необходимости (т.е. это некоммутативно). Очень полезно для запуска с массива «по умолчанию» и добавления нескольких реальных значений в одно попадание, при этом оставляя значения по умолчанию на месте для значений, не предоставленных.Требуемый пример кода:
источник
$defaults
должно быть$control_defaults
... + array( ...
недостаточно, чтобы указать на это? :-)Вот один, мне нравится, как намного проще установить значения по умолчанию для параметров функции , которые не указаны:
источник
Быстро и грязно по умолчанию.
Язык наполнен полезными ярлыками, что делает PHP идеальным кандидатом для (небольших) проектов, которые имеют короткий срок выхода на рынок. Не то, чтобы чистый PHP-код был невозможен, это просто требует дополнительных усилий и опыта.
Но я люблю PHP, потому что он позволяет мне выразить то, что я хочу, не набирая эссе.
PHP:
ЯВА:
И да, это включает в себя не печатать Int .
источник
//
он встроен в язык.