В этом уроке мы разберем работу с данными на языке PHP.
Данные — это объекты, которыми может оперировать PHP, к примеру, сообщение пользователя — это строка, а его возраст — это число. Данные могут быть разных типов.
Строки и числа
Самыми простыми типами данных в PHP являются строки и числа.
Числа обозначают сами себя, например 1, 12, 145, а вот строки требуется брать в кавычки (одинарные или двойные — без разницы):
Числа также могут быть дробями. Разделителем целой и дробной части служит знак «точка». К примеру, число 10.754 — это дробь.
Переменные
Одним из самых главных и распространенных объектов в программировании является переменная.
Переменная — это такой объект, который может хранить внутри себя различные данные, например, строки или числа.
Имя переменной должно состоять из английских букв: больших или маленьких, а также цифр и знака_подчеркивания.
В PHP перед переменной обязательно должен быть написан знак доллара $:
Операция присваивания
Очень важным элементом программирования является операция присваивания.
С помощью присваивания мы можем положить в переменную результат какой-либо операции, например, строку или число, а затем достать эти данные в нужном нам месте и воспользоваться ими.
Пример присваивания:
Комментарии
К коде PHP, так же, как и в HTML и CSS, можно оставлять комментарии, которые будут проигнорированы PHP при выполнении программы.
Их обычно используют для того, чтобы оставлять какие-либо пометки в коде или временно убрать какие-то строки кода, которые вам мешают, а потом иметь возможность быстро их вернуть обратно.
Комментарии могут быть многострочными и однострочными:
Функции
В программировании есть такое понятие, как функции. В отличии от переменных, которые хранят внутри себя некоторые данные, функции выполняют операции над этими данными.
Функция отличается от переменной тем, что перед именем функции не ставится знак доллара (он нужен только для переменных), а также тем, что у нее после названия стоят круглые скобки ( ), внутри которых через запятую можно перечислять параметры.
Параметры — это данные (например, строки или числа), которые мы даем функции, она производит над ними какие-то операции и возвращает нам результат.
Например, в PHP есть стандартная функция sqrt(), которая параметром принимает число, а возвращает квадратный корень этого числа.
То есть, если ей передать число 9, вот так — sqrt(9), то на выходе получим число 3. Полученное число мы можем записать в какую-либо переменную или вывести на экран.
Давайте найдем корень из 25 и запишем в переменную $a:
Функция echo
В PHP существует специальная функция echo, которая позволяет вывести какой-либо текст в окно браузера. В отличие от других функций, после echo не требуются круглые скобки ().
Следующий код выводит на экран заданный текст:
А в следующим коде переменной $text присваивается фраза, а затем содержимое этой переменной выводится на экран:
Математические операции
В PHP между числами и переменными можно совершать различные математические операции: сложение (знак +), вычитание (знак -), умножение (знак *), деление (знак /).
Чтобы понять, как с ними работать, посмотрите на следующий пример:
Можно сначала записать числа в переменные, а потом уже проводить операции с переменными:
А можно также одновременно производить операции и с числами, и с переменными:
Специальные значения
В PHP, как и в других языках программирования, существуют ключевые слова для некоторых специальных значений.
Значения true, false
Значения true и false обозначают истину и ложь соответственно. Они используются для таких вещей, которые предполагают два варианта ответа — да или нет.
К примеру, на вопрос ‘вам уже есть 18 лет?’ в можете ответить да, то есть true, или нет, то есть false.
Эти значения называются логическими.
Значение null
Значение null обозначает ‘ничего’. К примеру, если мы попробуем обратиться к переменной, которой мы еще не задали значение — то ее значение и будет null.
Функция var_dump
Бывают ситуации, когда нам нужно посмотреть содержимое переменной, чтобы понять, почему наш код работает не так, как мы хотели. Обычно на помощь приходит функция echo, однако, бывают ситуации, когда echo не работает.
Например, если переменная является пустой строкой », то выведя ее содержимое на экран с помощью echo, мы ничего не увидим.
Вторая ситуация — когда переменная содержит строку с пробелами по краям, например:
Для решения описанных выше проблем следует использовать функцию var_dump(), которая предназначена для отладки кода и позволяет выводить значения переменных и их тип.
С помощью этой функции мы можем увидеть, что переменная пуста, можем подсчитать количество пробелов по краям строки, можем увидеть, что переменная логическая и имеет значение true или false (об этих значениях чуть позже).
Пример использования var_dump():
PHP внутри HTML
PHP код можно вставлять внутрь HTML кода:
Сложение строк в PHP
В PHP, в отличие от многих других языков, строки складываются с помощью знака «точка»:
Получение определенного символа строки
В PHP можно получить доступ к определенному символу строки по его номеру таким образом: $a[n] – n-ный символ строки (учтите, что нумерация идет с нуля):
Сложности с операцией присваивания
Очень часто новички не понимают, что присваивание отличается от обычного равенства. Посмотрите следующий пример:
С точки зрения математики запись $a = $a + 2 абсурдна, но не с точки зрения программирования.
В данном случае переменная $a имела значение 1, а затем мы переменной $a присвоили новое значение — старое значение переменной $a плюс 2.
Операции инкремента и декремента
Операция $a++ или ++$a – увеличивает переменную $a на единицу. Эта операция называется инкремент.
Операция $a— или —$a – уменьшает переменную $a на единицу. Эта операция называется декремент.
Примеры:
Давайте посмотрим, в каких случаях проявляется разница между ++a и a++.
Пусть у нас есть код echo ++a и код echo a++.
В первом случае переменная сначала увеличится на единицу, а потом выведется, а во втором случае — сначала выведется, а потом увеличится.
Операции +=, -=, *=, /=
Мы уже рассматривали код, который демонстрирует сложности с операцией присваивания:
В данном случае мы присваиваем переменной $a ее текущее значение, увеличенное на 2. Однако PHP позволяет записать этот код еще короче с помощью оператора +=:
Кроме того, существуют операторы -=, *=, /=, которые эквивалентны следующему коду:
Операция .=
Существует также операция .=:
Типизация переменных
Что будет, если попробовать сложить, к примеру, число и строку, вот так: 3+’3′? В результате вы получите число 6. Это значит, что PHP автоматически осуществляет преобразование типов при необходимости, вам не нужно за это переживать.
То же самое случится, если, к примеру, сделать так: 3+true или 3+false. Попробуйте эти примеры сами и узнайте к чему преобразуется true в этом случае, а чему — false.
code.mu
1. Подружитесь со справочником по PHP
Если вы новичок в PHP, значит, пришло время познакомиться с внушающим почтение справочником PHP. Справочник по PHP невероятно исчерпывающий и содержит действительно полезные комментарии к каждой статье. Перед тем, как задавать вопросы или пытаться самостоятельно разрешить проблему, сэкономьте время и просто возьмите курс на справочник. Ответы на ваши вопросы уже удобно разместились в полезной статье на сайте PHP.net.
В данном случае мы Вам рекомендуем поискать самостоятельно справочники на русском языке, лучше php для начинающих. Будем рады, если Вы дадите ссылке на полезные справочники в комментариях к статье (Просто учитывайте, что это перевод статьи).
2. Включите отчет об ошибках
Отчет об ошибках в PHP очень полезен. Вы обнаружите ошибки в своем коде, которых не замечали ранее, однако не все они препятствуют работе приложения. Есть разные уровни детализации отчета, которые можно использовать, но E_ALL будет одинаково представлять вам все ошибки, критические ситуации и предупреждения.
Когда ваше приложение готово к продуктивной эксплуатации, придется выключить отчет об ошибках, иначе ваши посетители будут видеть странные сообщения, в которых ничего не поймут.
3. Попробуйте IDE
IDE (Integrated Development Environments/интегрированные среды разработки) – полезные инструменты для любого разработчика. Хотя они подойдут не для каждого, IDE определенно имеют свое значение. IDE обеспечивают такие инструменты, как:
А также большое количество других возможностей. Существует множество отличных IDE, поддерживающих PHP.
4. Попробуйте PHP-frameworks
Вы можете многое узнать о PHP, просто экспериментируя с PHP-фреймворками. Такие фреймворки, как CakePHP или CodeIgniter, позволяют быстро создавать приложения PHP, даже если вы в нем не эксперт. В каком-то смысле они – дополнительные подпорки, которые показывают вам, каким образом должно выглядеть приложение PHP, и демонстрируют полезные концепции программирования (вроде отделения логики от дизайна и т.д.).
Возражение: лично я не советую новичкам пользоваться фреймворками. Сначала выучите основы.
5. Научитесь DRY
DRY – аббревиатура от Don’t Repeat Yourself, (Не Повторяйтесь), и это – полезная концепция программирования, без разницы на каком языке. DRY-программирование, как предполагается названием, гарантирует, что вы не пишете избыточного кода. Вот пример от Reinhold Weber:
Рассмотрим код…
теперь применением к нему подход DRY:
Более подробно о концепции DRY можно прочесть здесь и здесь.
6. Делайте отступы и используйте пробелы в коде для читаемости
Если вы не используете отступы и пробелы в коде, то результат выглядит, как картина Джексона Поллака (Jackson Pollack). Обеспечьте читаемость своего кода и нормальный поиск, потому что почти наверняка в будущем вы будете делать в нем изменения. IDE и современные текстовые редакторы могут автоматически делать отступы в коде.
7. Делайте код многоуровневым
Разделение на уровни ваших приложений – это ничто иное, как разделение различных компонентов кода на части. В будущем это даст вам возможность легко изменять код.
8. Всегда используйте <?php ?>
Часто программисты пытаются использовать сокращения в операторах PHP. Вот как это обычно делается:
Хотя это действительно экономит несколько символов, все эти методы являются устаревшими и неофициальными. Придерживайтесь стандартного <?php ?>, так как это гарантированно будет поддерживаться всеми будущими версиями.
9. Используйте содержательные, последовательные названия
Именование – не только для вашего собственного удовольствия. Нет ничего хуже, чем продираться сквозь бессмысленные условные обозначения другого программиста. Помогите самому себе и другим, используя для своих классов и свойств имена, имеющие смысл.
10. Комментируйте, комментируйте, комментируйте
Кроме использования пробелов и отступов для разделения кода, вам также придется использовать встроенные комментарии, чтобы снабжать примечаниями свой код. Позже вы поблагодарите сами себя, когда придется возвращаться и искать что-либо в коде, или если вы просто не помните того, что делала определенная функция. Это также полезно для тех, кому нужно просмотреть ваш код.
11. Установите MAMP/WAMP
MySQL — самый популярный вид базы данных, используемый с PHP (хотя и не единственный). Если нужно настроить локальное окружение для разработки и тестирования ваших PHP-приложений на компьютере, предусмотрите установку MAMP (Mac) или WAMP (Windows). Установка MySQL на ваш собственный компьютер может стать утомительным процессом, а оба этих программных пакета содержат MySQL. Ловко и просто.
12. Установите лимиты своим скриптам
Установка лимита времени на PHP-скрипты – очень ответственная вещь. Бывают моменты, когда скрипты выходят из строя, и когда это произойдет, вам придется использовать свойство set_time_limit (установить лимит времени), чтобы избежать бесконечно повторяющихся циклов и истечения таймаутов времени соединения с базой данных. Set_time_limit устанавливает лимит времени на максимальное количество секунд, за которое выполняется скрипт (по умолчанию 30). По истечении этого времени возбуждается неустранимая ошибка.
13. Используйте объекты (или ООП)
Объектно-ориентированное программирование (ООП) использует объекты, чтобы представлять компоненты приложения. ООП – это не только способ разбить свой код на отдельные логические секции, оно также снижает количество повторений кода и делает намного более легким его модифицирование в будущем.
14. Поймите разницу между одинарными и двойными кавычками
Использование одинарных кавычек в строках более эффективно, так как парсеру (синтаксическому анализатору) не приходится просеивать код в поиске специальных символов (прим. перев. escape-последовательностей) и прочих вещей, что позволяют двойные кавычки. Там, где это возможно, старайтесь всегда использовать одинарные кавычки.
Возражение: Собственно, это не обязательно верно. Тесты Benchmark показывают, что при тестировании строк без переменных существуют определенные преимущества быстродействия при использовании двойных кавычек.
15. Не ставьте phpinfo() в свой Webroot
Phpinfo – чудесная вещь. Просто создав PHP-файл, в котором есть:
и пристроив его где-нибудь на сервере, вы сможете незамедлительно узнавать все об окружении своего сервера. Тем не менее, множество новичков поместит файл, содержащий phpinfo() в webroot сервера. Это чрезвычайно небезопасная практика, и если чей-то пытливый ум получит доступ, он может потенциально сглазить ваш сервер. Убедитесь, что phpinfo() находится в безопасном месте, а в качестве дополнительной меры удалите его, как только закончите.
16. Никогда, никогда не доверяйте своим пользователям
Если в приложении есть места для входа пользователей, вы всегда должны предполагать, что кто-то попробует ввести сомнительный код. (Мы не подразумеваем, что ваши пользователи — плохие люди. Это просто здравый смысл.) Отличный способ уберечь свой сайт от хакеров – всегда инициализировать свои переменные для защиты сайта от XSS-атак. На PHP.net есть пример должным образом закрытой формы с инициализированными переменными:
17. Храните пароли зашифрованными
Многие новички в PHP часто сбрасывают деликатные данные, такие как пароли, в базу данных, не применяя шифрование. Рассмотрите использование MD5 для шифрования паролей перед тем, как выкладывать их базу данных.
Возражение: Тем не менее, помните, что хэши MD5 уже давно скомпрометированы. Безусловно, они скорее безопасны, чем нет, но с помощью гигантской “спектральной таблицы” хакеры могут восстановить ваш хэш. Для обеспечения еще большей безопасности обдумайте возможность добавления «соли» (помех в виде «белого шума»). «Соль» – это обычно дополнительный набор символов, которые вы присоединяете к пользовательской строке.
18. Используйте инструменты визуализации баз данных
Если вам кажется сложным планировать и изменять базы данных для своих PHP-приложений, можно было бы рассмотреть возможность использования инструмента визуализации баз данных. Пользователи MySQL могут работать с DBDesigner и MySQL Workbench для визуального дизайна своих баз данных.
19. Используйте буферизацию вывода
Буферизация вывода – это простой способ очень сильно улучшить качество и скорость вашего PHP-скрипта. Без буферизации вывода ваш скрипт будет показывать HTML на странице так, как он обрабатывается – частями. Добавление буферизации вывода позволяет PHP хранить HTML как переменную и посылать его на браузер единой порцией.
Для активирования функции буферизации вывода просто добавьте ob_start() как здесь в начале файла.
Возражение: Хотя это и не требуется, обычно считается хорошей практикой просто взять и прикрепить функцию “ob_end_flush();” к концу документа. P.S. Хотите также сжать HTML? Просто смените “ob_start();”на “ob_start(‘ob_gzhandler’)”;
20. Оберегайте свой скрипт от атаки SQL-injection
Если вы не отделяете (escape) символы, использующиеся в строках SQL, ваш код уязвим для атаки SQL-injection. Избежать этого можно, используя либо функцию mysql_real_escape_string (прим. перев. для отделения символов), либо подготовленные операторы SQL (prepared statements).
Вот пример mysql_real_escape_string в действии:
И подготовленного оператора:
21. Попробуйте ORM
Если вы пишете объектно-ориентированный PHP, то можете использовать OR-mapping (ORM). ORM позволяет вам преобразовывать данные между реляционными базами данных и языками объектно-ориентированного программирования. Короче говоря, ORM дает возможность работать с базами данных таким же образом, каким вы работаете с классами и объектами в PHP.
Для PHP есть множество ORM-библиотек, таких как Propel, а также ORM встроен в фреймворки PHP, такие, как CakePHP.
22. Кэшируйте страницы, управляемые базой данных
Кэширование PHP-страниц, управляемых базой данных – отличная идея для улучшения скорости загрузки и производительности своего скрипта. В действительности не так уж трудно создать и извлечь статические файлы содержимого при помощи нашего доброго друга ob_start(). Вот пример, взятый со Snipe.net:
Этот кусок кода использует кэшированную версию страницы, если с момента ее генерации прошло менее 2 часов.
23. Используйте систему кэширования
Если вы хотите более надежную систему кэширования, есть несколько готовых скриптов кэширования для PHP, которые могут быть более полными, чем вышеприведенный пример.
24. Проверяйте достоверность данных Cookie
Данные Cookie, как любые другие данные, передаваемые по Сети, могут быть вредоносными. Вы можете проверять данные cookie либо при помощи thehtmlspecialchars(), либо mysql_real_escape_string().
25. Используйте системы кэширования статических файлов
Помимо использования систем кэширования баз данных вроде Memcached, вы также могли бы попробовать систему шаблонов, чтобы увеличить производительность своих PHP-приложениях. Smarty — надежная система шаблонов, имеющий встроенное кэширование.
26. Профилируйте свой код
Профилирование своего кода при помощи такого инструмента, как xdebug, может помочь вам быстро опознавать узкие места и прочие потенциальные проблемы в своем PHP-коде. Некоторые IDE типа Netbeans так же имеют возможность профилировать PHP.
27. Кодируйте согласно стандартам
Если уж вы скинули с себя путы изучения PHP, то можете начать учиться кодировать согласно стандарту. Между разными стандартами существуют отличия, поэтому обнаружить таковой и придерживаться его, в конце концов, будет способствовать логичности вашего кодирования.
28. Выполняйте функции вне циклов
Вы получаете проблему производительности, когда включаете вызовы функций внутрь циклов. Чем больше ваш цикл, тем длительнее будет задержка исполнения. Сэкономьте время и поместите функцию вне цикла в отдельной строке кода.
Примечание редактора: Представьте себе это следующим образом. Попробуйте удалить как можно больше операций из цикла. Вам действительно нужно создавать эту переменную для каждого повторения цикла? Вам действительно нужно использовать каждый раз эту функцию? Конечно, нет.:)
29. Не копируйте добавочные переменные
Некоторые любят пробовать делать свой код более привлекательным с помощью копирования предопределенных переменных в промежуточные переменные. Это уже чересчур и потенциально может удвоить размер памяти вашего скрипта. На Google Code есть плохие и хорошие примеры использования переменной:
Плохо
Хорошо
Возражение: В ответ на комментарий об «удвоении размера памяти», это, в действительности, обычное неверное представление. PHP реализовывает управление памятью“copy-on-write”. По существу, это означает, что вы можете присвоить значение для такого количества переменных, какое захотите, не волнуясь о том, что данные будут реально копироваться. Бездоказательно, что вышеприведенный «хороший» пример может сделать код более понятным, и я очень сильно сомневаюсь, что он хоть немного быстрее.
30. Обновите PHP до самой последней версии
Хотя это кажется весьма здравой мыслью, многие не делают апгрейд PHP настолько часто, как следовало бы. Между PHP 4 и PHP 5 существует много улучшений. Следите за тем, чтобы на вашем сервере было обновленное программное обеспечение.
31. Сократите количество запросов к базе данных
Так или иначе, чем больше вы можете снизить количество запросов к базе данных, тем выше будет производительность вашего PHP-скрипта. Существуют такие инструменты, как Stace (Unix) и Process Explorer (Windows), которые дают вам возможность находить дублирующие процессы с тем, чтобы их можно было бы объединить.
webformyself.com
Переменная в php — это ячейка памяти для хранения данных.
Почти все данные с которыми работает программа находятся в переменных.
Каждая переменная имеет своё собственное имя которое ей даёт программист.
Начинается оно всегда знаком $ , после которого можно ставить любые числа и буквы латиницы, а также знаки подчёркивания. Только первым знаком после $, цифру и подчёркивание ставить нельзя.
Количество знаков в имени — не ограничено, однако оно должно нести смысловую нагрузку, и быть понятным в прочтении.
В официальной документации PHP указано даже, что можно применять не только латиницу, но и любые символы, в том числе и русские буквы.
Однако, так как буквы кириллицы в различных кодировках имеют разный код, то применять их можно с осторожностью, или лучше вообще не применять.
Если название переменой состоит из нескольких слов, то писать их надо слитно, без пробела, и каждое слово, кроме первого начинать с заглавной буквы. Первое слово лучше начинать с маленькой буквы. Можно разделить слова знаком подчёркивания.
Имена переменных чувствительны к регистру букв, что конечно упрощает их выбор, так как next и nExt уже будут два разных имени.
Давайте напишем скрипт с переменными, и выведем содержащиеся в них данные на экран.
Браузер должен показать вот такую строку.
Разберём скрипт по составу.
<?php — начальный тег php.
$ — с этого знака всегда начинается имя переменной.
nExt — имя переменной.
= — оператор присвоения.
"Это данные в другой переменной" — значение переменной.
echo — команда вывод на экран.
?> — конечный тег php
Первые две строки после начального тега — объявление переменной. Т.е. указывается имя переменной и вся информация которая в ней содержится.
Объявление переменной делается один раз в начале скрипта, после чего она может использоваться бесконечное число раз без указания содержимого.
И в подтверждении этого ещё один скрипт, в котором для вывода на экран используется только название переменной.
Как видите, для разделения числовых значений, в качестве разделителя в php применяется точка.
С переменными можно производить различные математические действия — увеличивать, уменьшать делить и умножать.
Делается это следующим образом: после имени переменной ставится нужный математический оператор, определяющий вид действия (+, -, *, /), затем оператор присвоения (=), и число, на которое нужно произвести действие.
Эта программа выведет число 20.
PHP поддерживает восемь простых типов данных (переменных), но преимуществом этого языка является то, что он не требует ни описывать переменные явно, ни указывать их тип. Интерпретатор все это поймёт и сделает сам.
Однако иногда он может ошибиться, поэтому изредка возникает необходимость явно указывать, какой же тип имеет та или иная переменная.
Если по простому, то тип переменной определяется её содержанием. Если в переменной число — это integer или double (числовые типы), если строка — строковой тип string и т.д.
На имя переменной её тип не влияет, т.е. по имени невозможно определить к какому типу переменная относится.
Для определения типа переменной, при необходимости, есть специальная функция, но об этом чуть ниже.
starper55plys.ru
Что такое PHP?
PHP — язык создания сценариев, который давно перерос свое название. Дело в том, что PHP — это аббревиатура от слов Personal Home Page. Первая версия PHP была создана Расмусом Лердорфом в 1994 г. и представляла собой набор инструментов для отслеживания посетителей Web-страницы. Со временем PHP из набора инструментов превратился в полноценный язык программирования, а его название было изменено как рекурсивное образование PHP HyperText Preprocessor (препроцессор гипертекста PHP).
PHP — это серверный язык создания сценариев. Конструкции PHP, вставленные в HTML-текст, выполняются сервером при каждом посещении страницы. Результат их обработки вместе с обычным HTML-текстом передается браузеру.
В настоящее время основной версией PHP является седьмая.
Существуют два основных конкурента PHP: Active Server Pages (ASP) компании Microsoft и ColdFusion компании Allaire. По сравнению с ними PHP обладает рядом преимуществ, в числе которых:
- Высокая производительность. PHP-программы работают быстрее, чем ASP.
- Функциональность. Разработку PHP-программы можно отделить от собственно разработки Web-страницы, что упростит жизнь и программисту, и дизайнеру.
- Цена. PHP абсолютно бесплатен.
- Простота в использовании. Имеющие опыт программирования на распространенных языках найдут синтаксис PHP хорошо знакомым.
- Переносимость. Один и тот же PHP-код можно использовать как в среде NT, так и на платформах UNIX.
Общие правила построения PHP-программы
PHP-программы состоят из простого текста, поэтому набирать их можно в любом текстовом редакторе. Популярные HTML-редакторы имеют встроенную поддержку для редактирования PHP-программ.
Расширение файлов PHP-программ по умолчанию в PHP4 — .php. На основании этого расширения сервер распознает файл как PHP-программу и запускает интерпретатор.
PHP-программа должна быть отделена от обычного HTML-текста. Существует четыре стиля обрамления PHP-кода:
Стиль | Открывающий тег | Закрывающий тег |
Сокращенный | <? | ?> |
XML (стандартный) | <?php | ?> |
ASP | <% | %> |
SCRIPT (программный) | <SCRIPT LANGUAGE=»php»> | </SCRIPT> |
Из перечисленных тегов только стандартные и программные работают в любой конфигурации PHP.
Так выглядит простейший смешанный документ, состоящий из HTML-текста и PHP-кода:
Пример 1
<html> <head> <title>Документ, состоящий из HTML-текста и PHP-кода</title> </head> <body> <?php echo "А вот и PHP!<br>"; ?> Всё очень просто! </body> </html>
Здесь содержится один PHP-оператор echo. Этот оператор передает строку-аргумент «А вот и PHP!<br>» в HTML-страницу, которую генерирует сервер. При этом тег <br> сделает свое дело, т.е. осуществит переход на новую строку.
Для разделения операторов (по аналогии с Си) используется точка с запятой.
Комментарии в PHP-программе могут быть трех стилей:
/* Многострочный комментарий в стиле классического Си */ // Однострочный комментарий в стиле С++ # Однострочный комментарий в стиле Perl
В одном документе можно чередовать HTML-текст и блоки PHP-операторов сколько угодно раз. При этом все переменные, функции и классы, определенные в первом блоке, будут доступны и в последующих блоках.
В примере 1 заменим вызов функции echo на вызов встроенной функции phpinfo( ), которая выдаст список параметров PHP-среды.
htmlweb.ru
1. Создание функций с переменным числом аргументов
Скорее всего, вы уже знаете, что PHP позволяет нам создавать функции с необязательными аргументами. Сейчас я покажу функцию, в которой число аргументов может меняться от случая к случаю.
Но для начала, вспомним как мы создаём функции обычным образом:
Теперь посмотрим на то, как можно написать функцию с неограниченным количеством аргументов. Для этого будет использовать метод func_get_args():
2. Используем Glob() для поиска файлов
Часто названия функций говорят сами за себя. Такого нельзя сказать о функции glob().
Если не вдаваться в подробности, её функциональность схожа с методом scandir(). Она позволяет найти необходимый файл по шаблону:
Для нахождения файлов нескольких типов надо писать так:
Так же можно в шаблоне указать путь:
Для того чтобы получить полный путь к документу используйте метод realpath():
3. Информация об используемой памяти
Если вы будете отслеживать количество памяти, которое съедается на работу ваших скриптов то, наверное, чаще будете их оптимизировать.
В PHP существует мощный инструмент отслеживания используемой памяти. В разных частях скрипта нагрузки могут быть разные. Для того чтобы получить значение используемой памяти в данный момент, нам следует использовать метод memory_get_usage(). Для фиксации максимального количества используемой памяти используем memory_get_peak_usage()
4. Информация о процессоре
Для этого необходимо использовать метод getrusage(). Но учтите, что на Windows эта функция работать не будет.
Картина, изложенная выше, будет понятно тем, у кого есть опыт в системном администрировании. Для всех остальных предлагаем расшифровку:
- ru_oublock: количество операций блочной записи
- ru_inblock: количество операций блочного чтения
- ru_msgsnd: количество отправленных сообщений
- ru_msgrcv: количество принятых сообщений
- ru_maxrss: максимальный размер невыгружаемого набора
- ru_ixrss: общий объем разделяемой памяти
- ru_idrss: общий объем неразделяемых данных
- ru_minflt: количество используемых страниц памяти
- ru_majflt: количество ошибок отсутствия страниц
- ru_nsignals: количество принятых сигналов
- ru_nvcsw: количество переключений контекста процессом
- ru_nivcsw: количество принудительных переключений контекста
- ru_nswap: количество обращений к диску при подкачке страниц
- ru_utime.tv_usec: время работы в пользовательском режиме (микросекунды)
- ru_utime.tv_sec: время работы в пользовательском режиме (секунды)
- ru_stime.tv_usec: время работы в привилегированном режиме (микросекунды)
- ru_stime.tv_sec: время работы в привилегированном режиме (секунды)
Для того чтобы узнать какие ресурсы вашего процессора используются скриптом, вам необходимо значение ‘user time’ (время работы в пользовательском режиме) и ’system time’ (время работы в привилегированном режиме). Вы можете получить результат как в секундах, так и в микросекундах. Для того чтобы превратить общее количество секунд в десятичное число, вам необходимо разделить значение микросекунд на 1 миллион и добавить к значению секунд.
Запутанно как-то. Вот пример:
Хотя выполнение скрипта заняло около 3-х секунд, процессор не был сильно нагружен. Дело в том, что при вызове (sleep) скрипт практически не потребляет ресурсов процессора. Вообще существует множество задач, которые занимают значительное время, но при этом не используют процессор. К примеру, ожидание операций связанных с диском. Так что вы не всегда используете процессорное время в своих скриптах.
Вот ещё пример:
Работа скрипта заняла 1.4 секунды процессорного времени. В данном случае, время системных вызовов вообще низкое.
Время работы в привилегированном режиме (System Time) – это время, которое процессор затрачивает на выполнение системных запросов к ядру от имени программы. Пример:
Теперь системного времени затратилось намного больше, чем в прошлом примере. Всё благодаря методу microtime(), который использует ресурсы системы.
Однако следует отметить, что выведенное время может быть не точным, т.к. в данный момент времени ресурсы процессора используются и другими программами, что в результате может дать небольшую погрешность.
5. Магические константы
В PHP существует множество магических констант, таких как номер текущей строки (__LINE__), путь к файлу (__FILE__), путь к каталогу (__DIR__), имя функции (__FUNCTION__), имя класса (__CLASS__), имя метода (__METHOD__) и пространства имён (__NAMESPACE__).
Все мы их рассматривать не будем. Посмотрим только лишь парочку:
Используйте __LINE__ при отладке скриптов:
6. Генерирование уникальных ID
Бывают такие моменты, когда вам надо сгенерировать уникальную строку. Множество раз я видел, что для решения этой задачи используют функцию md5():
Но на самом деле для этих целей в PHP есть специальная функция uniqid()
Невооружённым взглядом можно заметить, что первые символы мягко говоря схожи… Так происходит из-за того, что данный метод использует время сервера для генерации символов. Это даже полезно, т.к. все сгенерированные значения получаются в алфавитном порядке, что даёт возможность быстро их сортировать.
Для того чтобы уменьшить шансы получения дубликата, мы можем добавить префикс или использовать второй параметр (увеличит количество символов):
Этот метод генерирует строки размером меньше, чем md5, тем самым вы сможете сэкономить место.
7. Сериализация
Вам когда-нибудь приходилось хранить комплексные данные в базе или в файле? Для того чтобы сконвертировать объект в строку в PHP предусмотрена специальная функция.
Вообще говоря, этих методов 2: serialize() и unserialize()
Вот так вот работают эти функции. Однако из-за бурного роста популярности JSON, в PHP 5.2 были добавлены 2 метода json_encode() и json_decode(). Их работа схожа с serialize():
Этот вариант более компактный и совместимый с другими языками, такими как JavaScript. Однако при работе с очень навороченными объектами может возникнуть потеря данных.
8. Сжатие строк
Кода мы говорим о сжатии, то на ум сразу же приходят архивные файлы в формате ZIP. PHP предоставляет возможность сжатия длинных строк без всяких файлов.
В следующем примере продемонстрируем работу функций gzcompress() и gzuncompress():
В наших силах уменьшить объём текста на 50%. В этих же целях можно использовать методы gzencode() и gzdecode(), которые используют другой алгоритм сжатия.
9. Выполнить перед завершением
В PHP существует функция register_shutdown_function(), которая позволит вам выполнить какой-то код перед завершением работы скрипта.
Допустим, вы хотите узнать какую-то информацию… Время работы скрипта:
На первый взгляд это может показаться тривиальной задачей. Для этих целей, вы можете поместить код в конце файла. Однако если перед этим где-то сработает функция exit(), этот код никогда не сработает. Так же, он не сработает если на странице будет ошибка или пользователь прервёт загрузку страницы (нажав на соответствующую кнопку в своём браузере);
При использовании метода register_shutdown_function() код выполнится в любом случае:
Вывод
PHP это целая планета, которая не перестаёт нас удивлять своим содержимым. А что думаете вы о данных функциях?
ruseller.com
Логическое ИЛИ (OR и ||)
Оператор логическое ИЛИ обозначается как OR
или ||
. Он выполняет операцию «логическое ИЛИ» над двумя операндами. Если один или оба операнда имеют истинное значение, он возвращает true
. Если оба операнда имеют ложные значения, он возвращает false
. У вас вероятно возник вопрос, зачем же сделали два варианта одного оператора? Смысл двух разных вариантов оператора «логическое ИЛИ» в том, что они работают с различными приоритетами.
Сначала разберем как работает оператор ||
. И так, если один или оба его операнда имеют истинное значение, он возвращает true
. Если оба операнда возвращают ложные значения, он вернет false
.
Оператор OR
работает также как и оператор ||
за одним исключением, если оператор OR
используется с присваиванием, то сначала он вычислит и вернет значение левого операнда, в остальном он работает точно также как и оператор ||
, т.е. если один или оба его операнда имеют истинное значение, он возвращает true
. Если оба операнда возвращают ложные значения, он вернёт false
.
Чтобы стало понятнее, как они работают, приведем следующий пример:
<?php // Оператор "||" имеет больший приоритет, чем "or" // Результат выражения (false || true) будет присвоен переменной $var1 // Действие приоритета: $var1 = (false || true) $var1 = false || true; echo $var1; // => 1 // Сначала переменной присваивается значение false, а затем вычисляется второй операнд // Действие приоритета: ($var2 = false) or true $var2 = false or true; echo $var2; // false не выводится // ($var3 = 0) or 3 $var3 = 0 or 3; echo "<br>$var3"; // => 0 ?>
Любые операторы сравнения и логические можно комбинировать в более сложные конструкции:
<?php $a = (6 == 6) || (4 <= 9); // или так echo ('c' != 'd') or ('A' === 'A'); ?>
Стоит упомянуть еще об одном важном моменте, касательно обоих операторов OR
и ||
. Оператор «логическое ИЛИ» начинает свои вычисления со своего левого операнда, если он возвращает true
, то правый операнд вычисляться не будет. Это позволяет экономить время исполнения, но нужно внимательно следить за тем, чтобы код, от которого может зависеть корректная работа программы, не был помещен в правый операнд.
Логическое И (AND и &&)
Оператор логическое И обозначается как AND
или &&
. Он выполняет операцию «логическое И» над двумя операндами. Он возвращает true
тогда и только тогда, когда оба операнда имеют значение true
. Если один или оба операнда возвращают значение false
, оператор возвращает false
. Смысл двух разных вариантов записи оператора «логическое И» такой же как и у двух предыдущих операторов, а именно в том, что они работают с различными приоритетами.
Сначала разберем как работает оператор &&
. И так, если оба его операнда имеют истинное значение, он возвращает true
. Если хотя бы один или оба его операнда возвращают значение false
, он тоже вернет false
.
Оператор AND
работает также как и оператор &&
за одним исключением, если оператор AND
используется с присваиванием, то сначала он вычислит и вернёт значение левого операнда, в остальном он работает точно также как и оператор &&
. Если хотя бы один из его операндов возвращает значение false
, он тоже вернет false
, также если оба операнда возвращают ложные значения, он возвращает false
.
Для понимания рассмотрим теперь, как это работает на практике:
<?php // Оператор "&&" имеет больший приоритет, чем "and" // Результат выражения (true && false) будет присвоен переменной $bar1 // Действие приоритета: $bar1 = (true && false) $bar1 = true && false; // Сначала переменной присваивается значение true, а затем вычисляется второй операнд // Действие приоритета: ($bar2 = true) and false $bar2 = true and false; var_dump($bar1, $bar2); // ($bar3 = 9) and 3 $bar3 = 9 and 3; echo "<br>$bar3"; // => 9 ?>
Исключающее ИЛИ (XOR)
Оператор исключающее ИЛИ обозначается как XOR
. Он возвращает значение true
, если один и только один из операндов имеет значение true
. Если оба операнда имеют значение true
, оператор вернет значение false
.
Так как приоритет оператора XOR
такой же как и у операторов AND
и OR
(ниже чем у оператора присваивания), и он используется в выражении с присваиванием, то сначала он вычисляет и возвращает значение левого операнда.
<?php // ($a1 = 19) xor 5 > 6 $a1 = 19 xor 5 > 6; var_dump($a1); // => 19 var_dump(true xor true); // false var_dump((2 < 3) xor (5 != 5)); // true ?>
Логическое НЕ (!)
Оператор логическое НЕ, его также называют отрицание обозначается знаком !
. Он является унарным оператором, помещаемым перед одиночным операндом. Оператор «логическое НЕ» используется для инверсии логического значения своего операнда и всегда возвращает true
или false
.
Если потребуется инвертировать значение выражения, например a && b
, необходимо будет использовать круглые скобки: !(a && b)
. Также с помощью оператора !
можно преобразовать любое значение x
в его логический эквивалент, дважды применив оператор: !!x
.
<?php $a1 = 10; var_dump((11 == 11)); // true // оператора ! инвертирует значение var_dump(!(11 == 11)); // false // преобразует в логическое значение var_dump(!!$a1); // true ?>
puzzleweb.ru
Условия в php имеют ключевое слово if. И логические операторы OR или ||, AND или &&.
Конструкция условия if следующая:
if (условие) тогда действие;
Рассмотрим пример использования or and в операторе if
<?php
$x = 1;
if (isset($x)) echo "переменная x существует";
////////////////////////////////////////////////
if (isset($x) && $x == 1 ) echo "<br>x = 1";
////////////////////////////////////////////////
$x = $x+1;
if (isset($x) and $x == 2 ) echo "<br>x = 2";
////////////////////////////////////////////////
$x++;
if (isset($x) and $x == 3 && $x != 0) echo "<br>x = 3 and x != 0";
?>
Итак, мы видим, что в первом случае, есть только одно условие if (isset($x)), другими словами: если переменная $x существует, тогда выводится сообщение echo "переменная x существует";
Второе условие более сложнее: if (isset($x) && $x == 1 ) — если переменная существует и равна 1, тогда выводим echo "<br>x = 1"; <br> — это перевод строки.
Логический оператор AND выполняет условие только в том случае, если все условия истинные. Если хотя бы одно условие ложно, то все условие ложно. Вот почему оператор AND иногда сравнивается с математическим умножением. 451*6845*655*0 = 0. Какие бы не были числа, но если в выражении есть ноль, то все выражение нулевое.
Третье условие аналогично второму, только вместо логического оператора && используем оператор and. Этим я хотел показать, что логические операторы && и and имеют тот же смысл.
Четвертое условие показывает сложные условия, которые вы можете использовать в своих программах.
$x = $x+1;
$x++;
Две строки выше имеют один и тот же смысл. Они увеличивают переменную на единицу.
Результат работы данного кода будет следующим:
Логический оператор OR отличается от оператора AND тем, что если в условии есть хоть одно истинное условие, то все условие истинно. Вот почему оператор OR иногда сравнивается с математическим сложением. 0+0+0+1 = 1. Если в выражении много нулей, но есть хотя бы одна единица, то все выражение ненулевое.
Пример:
<?php
$x = 1;
$y = 5;
if ($x == 1 or $y ==2) echo "x = 1 or y = 2 хотя на самом деле x = $x,а y = $y";
if ($x == 1 || $y ==2) echo "<br>x = 1 or y = 2 хотя на самом деле x = $x,а y = $y";
?>
Мы видим, что на самом деле выполняется только одно условие, второе условие ложно, но благодаря оператору OR все выражение истинно. Также мы видим, что операторы OR и || идентичны.
Результат работы данного кода будет следующим:
life-prog.ru
<?php
// --------------------
// foo() никогда не будет вызвана, т.к. эти операторы являются шунтирующими (short-circuit)
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
// --------------------
// "||" имеет больший приоритет, чем "or"
// Результат выражения (false || true) присваивается переменной $e
// Действует как: ($e = (false || true))
$e = false || true;
// Константа false присваивается $f, а затем значение true игнорируется
// Действует как: (($f = false) or true)
$f = false or true;
var_dump($e, $f);
// --------------------
// "&&" имеет больший приоритет, чем "and"
// Результат выражения (true && false) присваивается переменной $g
// Действует как: ($g = (true && false))
$g = true && false;
// Константа true присваивается $h, а затем значение false игнорируется
// Действует как: (($h = true) and false)
$h = true and false;
var_dump($g, $h);
?>
php.net