PHP — эффективный язык сетевого программирования, благодаря своим преимуществам гибкого написания и быстрой работы, он быстро стал предпочтительным языком для веб-программистов. Недавнее авторитетное исследование показало, что 31,6% веб-сайтов сейчас используют PHP в качестве основного языка программирования на стороне сервера.
Однако стать мастером программирования PHP непросто. Это не так, как многие себе представляют: если вы можете быстро написать несколько простых кодов для решения сложной проблемы, вы являетесь мастером программирования PHP. Настоящему мастеру PHP также необходимо учитывать множество других вопросов. Следующие три рекомендации — это рекомендации, которым зрелый PHP-программист должен в первую очередь следовать при программировании.
1. Лень – золото
2. Пишите красивый код
3. Гонитесь за скоростью программирования, а не за скоростью программирования
1. Лень – золото
Вы ленивый программист? Эта идея такая странная! Потому что, наверное, самые занятые люди в мире — программисты. Но именно потому, что программисты слишком заняты, им следует научиться лениться при программировании.
Для программиста есть два ленивых пути: Во-первых, смело использовать чужие готовые программные коды и интегрировать эти коды в свои собственные программы или проекты. Во-вторых, нужно написать несколько полезных кодов для создания библиотеки функций, которую можно будет легко использовать при написании программ в будущем. Это избавит вас от большого количества повторяющейся работы и, естественно, сделает вас менее ленивым.
Эти два ленивых метода очень подходят для PHP-программистов.
Прежде всего, PHP — это язык, рожденный и выросший в свободной и открытой среде. Во всем мире тысячи программистов постоянно стремятся к совершенству PHP, а также готовы поделиться своей изобретательностью и написанным кодом с другими. Каждый день вы можете найти множество превосходного программного кода на некоторых веб-сайтах PHP, в списках рассылки и группах новостей. Говоря это, я не призываю вас целый день ждать, пока другие напишут для вас код, но вы можете «встать на плечи великих людей» и полностью продвигать «доктрину использования программных кодов других людей». сэкономите много денег. Во-вторых, на PHP вы можете легко создать собственную библиотеку функций, что избавит вас от многих хлопот при написании программ в будущем.
Ниже автор представляет вам несколько общих функций. Некоторые из этих функций взяты из некоторых проектов с открытым исходным кодом в Интернете, а некоторые выбраны из списка рассылки. Если вы сможете добавить их в свою библиотеку, рано или поздно вы получите от них пользу.
1. Общие функции обработки базы данных.
По сравнению с другими функциями CGI одним из преимуществ PHP является то, что он обладает очень мощными возможностями обработки баз данных. Однако в PHP для работы с разными базами данных используются некоторые специфические функции, а общие функции обработки баз данных отсутствуют. Это значительно снижает переносимость программного кода, что также доставляет массу неудобств начинающим друзьям-программистам.
В Интернете многие программисты решили эту проблему, инкапсулируя классы. Они написали унифицированные функции для работы с любой популярной базой данных — будь то Mysql, популярная в мире Linux, или SqlServer, широко популярная на платформах Windows. Лично мне очень нравится использовать эти функции, потому что вы можете напрямую использовать некоторые простые функции, такие как «query» и «next_record», без необходимости учитывать сложные вещи, такие как соединения с базой данных и дескрипторы базы данных, не говоря уже о том, какую базу данных вы используете. .
Если вам нужны эти функции, вы можете получить их, посетив следующие URL-адреса:
http://phplib.netuse.de/
http://phpclasses.UpperDesign.com/browse.html/package/20
http://phpdb.linuxbox.com/
http://www.phpchina.com
2. Функция отладки переменных
. Отладка программ PHP всегда была головной болью. В нем нет встроенной среды компиляции и отладки, как в языках высокого уровня, таких как VB, и нет такой возможности. возможность использования в программах PHP, таких как Perl. Запуск непосредственно в среде Linux или DOS. Фактически, мы можем завершить отладку PHP, гибко используя оператор echo.
Следующие функции позволяют вам в любой момент проверить тип и значение любой переменной в программе.
function ss_array_as_string (&$array, $column = 0) {
$str = "Массив(n";
while(list($var, $val) = каждый($array)){
для ($i = 0; $i < $column+1; $i++){
$str .= " ";
}
$стр .= $вар ==> ;
$str .= ss_as_string($val, $column+1)." n";
}
для ($i = 0; $i < $column; $i++){
$str .= " ";
}
вернуть $стр.);
}
функция ss_object_as_string (&$object, $column = 0) {
if (пустой($объект->имя класса)) {
вернуть «$объект»;
} еще {
$str = $object->имякласса."( n";
while (list(,$var) = каждый($object->persistent_slots)) {
для ($i = 0; $i < $column; $i++){
$str .= " ";
}
глобальный$$вар;
$стр .= $вар ==> ;
$str .= ss_as_string($$var, columns+1)." n";
}
для ($i = 0; $i < $column; $i++){
$str .= " ";
}
вернуть $стр.);
}
}
function ss_as_string (&$thing, $column = 0) {
если (is_object($thing)) {
return ss_object_as_string($вещь, $столбец);
}
elseif (is_array($thing)) {
return ss_array_as_string($thing, $column);
}
elseif (is_double($вещь)) {
return "Double(".$thing.")";
}
elseif (is_long($вещь)) {
return "Long(".$thing.")";
}
elseif (is_string($вещь)) {
return "String(".$thing.")";
}
еще {
return "Неизвестно(".$thing.")";
}
}
При необходимости просто добавьте в программу следующий код, чтобы просмотреть типы и значения переменных (включая массивы и объекты), используемых в программе:
echo ss_as_string($my_variable);
Используя следующий оператор, мы можем напрямую просмотреть значения всех переменных в программе:
echo ss_as_string($GLOBALS);
3. Функции, управляющие информацией журнала.
Еще одним важным способом отладки программ PHP является просмотр информации журнала. Если вы сможете легко контролировать уровень информации журнала и отображаемое содержимое информации журнала, это сделает отладку программы более удобной. Следующие функции могут легко реализовать эту функцию.
$ss_log_level = 0;
$ss_log_filename = /tmp/ss-log;
$ss_log_levels = массив(
НЕТ => 0,
ОШИБКА => 1,
ИНФО => 2,
ОТЛАДКА => 3);
функция ss_log_set_level ($level = ОШИБКА) {
глобальный $ss_log_level;
$ss_log_level = $level;
}
функция ss_log ($level, $message) {
глобальный $ss_log_level, $ss-log-filename;
if ($ss_log_levels[$ss_log_level] < $ss_log_levels[$level]) {
//Не отображать информацию журнала
вернуть ложь;
}
$fd = fopen($ss_log_filename, "a+");
fputs($fd, $level. - [.ss_timestamp_pretty().] - .$message."n");
fзакрыть($fd);
вернуть истину;
}
функция ss_log_reset () {
глобальный $ss_log_filename;
@unlink($ss_log_filename);
}
В приведенной выше функции есть четыре переменные уровня журнала. При запуске программы PHP информация журнала может записываться и отображаться только в том случае, если уровень журнала ниже заданного значения уровня. Например, добавьте в программу следующий оператор:
ss_log_set_level(INFO);
Тогда при запуске PHP-программы может быть записана и отображена только информация LOG уровня ERROR и INFO, а информация уровня DEBUG игнорируется. Кроме того, мы также можем установить отображаемое информационное содержание с помощью следующих операторов:
ss_log(ERROR, "ОШИБКА уровня тестирования");
ss_log(INFO, "ИНФО уровня тестирования");
ss_log(DEBUG, "уровень тестирования DEBUG");
Вы также можете использовать следующий оператор для очистки информации журнала в любое время:
ss_log_reset();
4. Функция проверки скорости.
Для того, чтобы оптимизировать код, нам нужен метод, который сможет протестировать время выполнения кода, чтобы выбрать оптимальный код. Следующая функция может проверить время, необходимое для запуска кода:
function ss_timing_start ($name = default) {
глобальный $ss_timing_start_times;
$ss_timing_start_times[$name] = взорваться(, microtime());
}
функция ss_timing_stop ($name = по умолчанию) {
глобальный $ss_timing_stop_times;
$ss_timing_stop_times[$name] = взорваться(, microtime());
}
функция ss_timing_current ($name = по умолчанию) {
глобальные $ss_timing_start_times, $ss_timing_stop_times;
if (!isset($ss_timing_start_times[$name])) {
вернуть 0;
}
if (!isset($ss_timing_stop_times[$name])) {
$stop_time = взорваться(, микровремя());
}
еще {
$stop_time = $ss_timing_stop_times[$name];
}
$current = $stop_time[1] - $ss_timing_start_times[$name][1];
$current += $stop_time[0] - $ss_timing_start_times[$name][0];
вернуть $текущий;
}
Теперь мы можем легко проверить время выполнения любого фрагмента кода. Мы даже можем использовать несколько таймеров одновременно. Нам просто нужно установить разные параметры в качестве имени таймера при использовании вышеуказанных функций.
5. Отладка и оптимизация операций с базами данных
Для баз данных решающее значение имеет скорость работы. Хотя во многих книгах и статьях преподаются методы быстрого запуска баз данных, все методы необходимо проверять на практике. Далее мы объединим функцию query() из библиотеки функций PHPLib и функции, представленные выше, чтобы написать новую функцию query(). По сравнению с исходной функцией эта функция добавляет функцию мониторинга времени выполнения.
function query($Query_String, $halt_on_error = 1) {
$this->connect();
ss_timing_start();
$this->Query_ID = @mysql_query($Query_String,$this->Link_ID);
ss_timing_stop();
ss_log(INFO, ss_timing_current().Secs - .$Query_String);
$this->Строка = 0;
$this->Errno =mysql_errno();
$this->Error =mysql_error();
if ($halt_on_error && !$this->Query_ID) {
$this->halt("Неверный SQL: ".$Query_String);
}
вернуть $this->Query_ID;
}
2. Напишите красивый код
1. Отделите серверную программу от клиентской программы.
При написании PHP-программы одни коды используются для обработки одних транзакций, таких как работа с базами данных, выполнение математических операций и т. д., а другие. коды предназначены только для обработки транзакций. Результаты отображаются, например, некоторый код PHP, который использует оператор echo для отображения результатов в формате HTML в веб-браузере, и те коды HTML, которые непосредственно встроены в программу PHP. Прежде всего, нам следует четко различать эти два типа кода, называя первый фоновой программой, а второй — интерфейсной программой.
Поскольку PHP является встроенным языком программирования, то есть весь код PHP может быть встроен в код HTML, что значительно упрощает написание программ. Однако, если ситуация доходит до крайности, ее необходимо повернуть вспять. Если вы смешаете PHP-код и HTML-код в длинной программе, это сделает программу беспорядочной и неблагоприятной для обслуживания и чтения программы. Поэтому нам необходимо максимально пересадить в эти программы PHP-код, смешанный с HTML-кодом, инкапсулировать эти коды в функции в специальных файлах, а затем использовать оператор include в HTML-коде для включения этих файлов в соответствующее место. Просто вызовите эти функции.
С одной стороны, этот подход делает HTML-код и PHP-код простым и легким для чтения. С другой стороны, поскольку HTML-код необходимо постоянно обновлять, этот метод разделения может гарантировать, что фоновая программа не будет уничтожена. .
В отличие от интерфейсных программ, серверные программы стремятся к стабильности, структуре и редко меняются, поэтому их следует тщательно разрабатывать и управлять ими. На самом деле, стоит потратить много времени на разработку настольных программ. «Сажайте деревья сейчас, а потом наслаждайтесь тенью». Вы сможете легко использовать фоновые программы, которые вы пишете сейчас, в будущих дизайнерских работах.
2. Гибкое использование включаемых файлов.
Как упоминалось ранее, фоновые программы должны быть организованы в виде последовательности включаемых файлов. Включенные файлы могут загружаться динамически при необходимости с помощью оператора include или автоматически загружаться заранее с помощью директивы auto_prepend_file в файле php.ini.
Если вы воспользуетесь последним методом, хотя вы и получите преимущества раз и навсегда, есть и некоторые недостатки, заслуживающие нашего внимания. Следующий фрагмент кода показывает, сколько времени требуется для анализа большого включаемого файла:
require(timing.inc);
ss_timing_start();
включить(test.inc);
ss_timing_stop();
эхо
.ss_timing_current().
?>
В приведенном выше коде test.inc представляет собой включаемый файл из 1000 строк. Результаты показывают, что анализ этого включаемого файла занимает 0,6 секунды. Для большого веб-сайта эта скорость не является незначительной.
Еще одним недостатком использования включаемых файлов является то, что если в операторе файла возникнет ошибка, программа PHP всего веб-сайта не сможет работать. Поэтому используйте его очень осторожно.
Фактически, после небольшой обработки включаемого файла его можно будет проанализировать только при необходимости. Следующий код вызывает анализ файла abc.inc только тогда, когда это необходимо программе:
if (define(__LIBA_INC)) return;
определить (__LIBA_INC, 1);
/*
* Код...
*/
?>
3. Используйте метод объектно-ориентированного программирования
. PHP также является объектно-ориентированным языком. Метод объектно-ориентированного программирования — это метод проектирования программного обеспечения, пользующийся большим уважением среди выдающихся программистов. В программировании на PHP можно в полной мере использовать преимущества объектно-ориентированного языка. Преимущество заключается в инкапсуляции объектов в программировании. В предыдущем коде мы использовали объектно-ориентированный метод. Например, при управлении базой данных мы инкапсулировали функцию query() в класс базы данных, что значительно облегчило управление кодом и повысило читабельность программы.
3. Стремитесь к скорости программы, а не к скорости программирования.
При создании веб-сайтов важными факторами, определяющими успех или неудачу, являются скорость работы программы и скорость загрузки веб-страниц. Как веб-программисту, вам следует уделять больше внимания скорости выполнения вашего кода. Несколько методов, представленных ниже, в разной степени улучшают скорость работы кода.
1. Используйте встроенный код HTML вместо оператора echo PHP.
Поскольку PHP является встроенным языком веб-программирования, код HTML и код PHP могут быть встроены друг в друга. Однако многие программисты обеспокоены тем, что чрезмерное использование «» для встраивания кода PHP в HTML-код приведет к многократному вызову интерпретатора PHP, тем самым снижая скорость работы кода PHP. Поэтому они предпочитают использовать оператор PHP echo для вывода HTML-кода вместо этого. напрямую Используйте HTML-код. Но истина прямо противоположна. Каждая страница PHP вызывает интерпретатор PHP только один раз для интерпретации всех кодов PHP. Поэтому встраивание PHP-кодов только при необходимости и в большинстве случаев непосредственное использование HTML-кодов для ввода результатов не только не снизит скорость работы программы, но и приведет к снижению скорости работы программы. Кроме того, поскольку анализ операторов echo сокращается, скорость работы кода часто можно повысить.
Следующий фрагмент кода демонстрирует наш вывод. В этом коде мы используем функцию проверки времени, представленную ранее.
Используйте str-replace вместо ereg-replace
Программисты, привыкшие к программированию на Perl, более охотно используют ereg_replace для выполнения работы по замене строк, поскольку использование ereg_replace в PHP аналогично использованию сопоставления с образцом в Perl. Однако следующий код доказывает, что использование str_replace вместо ereg_replace значительно улучшит скорость работы кода.
Проверьте скорость работы str_replace и ereg_replace
//Этот код проверяет скорость работы str_replace
акцент ?>
для ($i=0; $i<1000; $i++) {
str_replace(i>, b>, $string).
}
?>
//Этот код проверяет скорость работы ereg_replace
для ($i=0; $i<1000; $i++) {
ereg_replace(<([/]*)i>, <1b>, $string).
}
?>
//Распечатываем
вывод
результата,используя str_replace time -
Время использовать ereg_pattern —
запустив приведенный выше код, результат:
время использования str_replace — 0,089757.
Время использования ereg_pattern — 0,248881.
Из результатов работы мы видим, что использование str_replace вместо ereg_replace в качестве функции замены строк значительно повышает скорость работы кода.
3. Обратите внимание на кавычки строк.
PHP, как и многие другие языки программирования, может использовать двойные кавычки ("") для заключения строк в кавычки или одинарные кавычки (). Но в PHP, если вы используете двойные кавычки для заключения строки в кавычки, синтаксический анализатор PHP сначала проверит, есть ли в строке ссылка на переменную. Если переменная существует, он заменит ее. Если это одинарные кавычки, то это не так сложно — напрямую отображаются все строки, заключенные в одинарные кавычки. Очевидно, что в программировании на PHP быстрее использовать одинарные кавычки для заключения строковых переменных, чем двойные.
4. Избегайте использования совместных операций с базой данных.
По сравнению с другими языками веб-программирования функции базы данных PHP очень мощные. Однако запуск базы данных на PHP по-прежнему является очень трудоемким и трудоемким делом. Поэтому, как веб-программист, вы должны свести к минимуму операции запроса к базе данных и установить соответствующие индексы для базы данных. Еще стоит отметить, что при использовании PHP для работы с базой данных старайтесь не использовать совместные операции с несколькими таблицами данных. Хотя совместные операции могут улучшить функцию запросов к базе данных, они значительно увеличивают нагрузку на сервер.
Чтобы проиллюстрировать эту проблему, мы можем рассмотреть простой пример ниже.
Мы создали в базе данных две таблицы данных foo и big_foo. В таблице данных foo есть только одно поле, содержащее все натуральные числа от 1 до 1000. Таблица данных big_foo также имеет только одно поле, но содержит все натуральные числа от 1 до 1 000 000. Итак, с точки зрения размера big_foo равен foo в сочетании с самим собой.
$db->query("выбрать * из foo");
0,032273 секунды
$db->next_record();
0,00048999999999999 секунд
$db->query("вставить в значения foo (NULL)");
0,019506 секунды
$db->query("выберите * из foo как a, foo как b");
17,280596 секунд
$db->query("выберите * из foo как a, foo как b, где a.id > b.id");
14,645251 секунды
$db->query("выберите * из foo как a, foo как b, где a.id = b.id");
0,041269 секунды
$db->query("выбрать * из big_foo");
25,393672 секунды
Из приведенных выше результатов операции мы видим, что скорость объединения двух таблиц данных с 1000 записями не намного выше, чем скорость отдельной операции с большой таблицей данных с 1 000 000 записей.
5. Обратите внимание на разницу между include и require.
В программировании PHP include() и require() имеют одинаковые функции, но есть некоторые различия в использовании. include() — это функция условного включения, а require() — функция условного включения. безусловный. Содержит функции. Например, в следующем примере, если переменная $somgthing имеет значение true, будет включен файл somefile:
if($something){
включить("какой-то файл");
}
Но независимо от того, какое значение принимает $something, следующий код включит файл somefile в файл:
if($something){
требуется("какой-то файл");
}
Следующий интересный пример иллюстрирует разницу между этими двумя функциями.
$я = 1;
в то время как ($i < 3) {
require("somefile.$i");
$я++;
}
В этом коде программа будет включать один и тот же файл каждый раз при выполнении цикла. Очевидно, это не входило в первоначальные намерения программиста. Из кода мы видим, что этот код надеется включать разные файлы в каждый цикл. Если вы хотите завершить эту функцию, вам необходимо обратиться к функции include():
$i = 1;
в то время как ($i < 3) {
include("somefile.$i");
$я++;
}
6. Обратите внимание на разницу между echo и print.
Функции echo и print в PHP в основном одинаковы, но между ними есть небольшие различия. Вы можете использовать print как обычную функцию в PHP-коде. Например, после выполнения следующего кода значение переменной $res будет равно 1.
$ret = print "Hello World";
Это означает, что print можно использовать в некоторых сложных выражениях, а echo — нет. Аналогичным образом, оператор echo выполняется немного быстрее, чем оператор печати в коде, поскольку оператор echo не требует возврата какого-либо значения.