КомПик

Объявление

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » КомПик » Web програмирование » manual PHP3


manual PHP3

Сообщений 1 страница 9 из 9

1

PHP Версии 3.0 - язык написания сценариев, внедренный в HTML. Многое из синтаксиса заимствовано из C, Java и Perl, с добавлением специфичных для PHP возможностей. Задача языка состоит в том, чтобы дать возможность Web-разработчикам легко и быстро создавать динамично изменяемые html-страницы.



Продолжение следует......

0

2

Глава 1. Введение в PHP3
Что такое PHP3?

PHP версии 3.0 - язык описания сценариев, выполняемых на сервере, встроенный в HTML.
Что может делать PHP3?

Возможно самая сильная и значимая возможность в PHP3 - уровень интеграции с базами данных. Написание веб-страницы работающей с базой данных невероятно проста. В настоящее временя поддерживаются следующие базы данных:
           Oracle
                                Adabas D
           Sybase
                                FilePro
           mSQL
                                Velocis
           MySQL
                                Informix
           Solid
                                dBase
           ODBC
                                Unix dbm
           PostgreSQL
Краткая История PHP

PHP был задуман где-то в конце 1994 года Расмусом Ледорфом(Rasmus Lerdorf). Ранние невыпущенные версии использовались на его домашней странице для того, чтобы следить за тем кто просматривал его интерактивное резюме. Первая используемая версия cтала доступна где-то в начале 1995 и была известна как Personal Home Page Tools. Она состояла из очень упрощенного движка синтаксического анализатора, который понимал только несколько специальных макрокоманд и ряд утилит, которые затем были в общем использовании на домашних страницах. Гостевые книги, счетчики и некоторые другие дополнения.

Довольно трудно дать какую-либо жесткую статистику, но отмечено, что к 1996 г. PHP/FI был использован по крайней мере на 15,000 веб-сайтах во всем мире. В середине 1997г. эта цифра выросла до более чем 50,000. В середине 1997г. также наблюдалось изменение в разработке PHP. Из частного любимого проекта Расмуса, которому способствовала горстка людей , это превратилось в намного более организованную рабочую группу. Синтаксический анализатор был заново переписан Зевом Сураски(Zeev Suraski) и Анди Гутмансом(Andi Gutmans), и этот новый синтаксический анализатор стал основой для PHP Версии 3.

Сегодня ( в середине -1998г.) как PHP/FI так и PHP3 поставляется с рядом коммерческих продуктов типа C2's StrongHold web server и RedHat Linux и консервативной оценкой, основанной на экстрaполяции чисел, предоставленных NetCraft было бы то, что PHP используется на 150,000 cайтах во всем мире. В перспективе, их больше чем сайтов, запущенных на Netscape's flagship Enterprise server в Интернете.

0

3

Глава 2. Возможности PHP3

HTTP-аутификация средствами PHP

HTTP аутификация в PHP доступна только при использовании модуля Apache. В модуле Apache PHP-скрипт, может использовать функцию Header() для отправки сообщения "Authentication Required" браузеру клиента, вызвав тем самым окно диалога Username/Password. Как только пользователь заполняет поля username и password, URL содержащий PHP-скрипт будет вызван заново с переменными $PHP_AUTH_USER, $PHP_AUTH_PW и $PHP_AUTH_TYPE содержащими введенную информацию. В данном случае обеспечивается только "Основная" аутификация.

Фрагмент примера сценария, который производит аутентификацию клиента на странице, должен быть следующим:
Пример 2-1. Пример HTTP аутификации
<?php
  if(!isset($PHP_AUTH_USER)) {
    Header("WWW-Authenticate: Basic realm=\"My Realm\"");
    Header("HTTP/1.0 401 Unauthorized");
    echo "Text to send if user hits Cancel button\n";
    exit;
  } else {
    echo "Hello $PHP_AUTH_USER.<P>";
    echo "You entered $PHP_AUTH_PW as your password.<P>";
  }
?>

Вместо просто распечатывания $PHP_AUTH_USER и $PHP_AUTH_PW, Вы вероятно хотели бы проверить имя_пользователя и пароль для проверки правильности. Возможно, посылая запрос к базе данных, или, ища пользователя в dbm файле.

Будьте внимательны при использовании браузера Internet Explorer. Он весьма придирчив к порядку заголовков. Отправка заголовка WWW-Authenticate перед заголовком HTTP/1.0 401 возможно даст аутификацию в любом случае.

Чтобы предотвратить от записи кем - то сценарий , который определяет пароль для страницы, которая была опознана через традиционный внешний механизм, PHP_AUTH переменные не будут установлены, если допускается внешнее установление подлинности для той специфической страницы. В этом случае может быть использована переменная $REMOTE_USER чтобы идентифицировать внешне-опознанного пользователя.

Обратите внимание, однако, что вышеупомянутое не защищает от кого - то, кто может управлять не-аутифицированным URL используя перехваченный пароль из аутифицированных URL на том же самом сервере.

И Netscape и Internet Explorer очистит локальный кэш окна аутификации после получения ответа сервера 401. Это эффективно как мера отключения пользователей("log out"), вынуждающая их повторно ввести их username и пароль. Некоторые используют это для отключения пользователя по истечении интервала времени("time out"), или обеспечивают кнопку "Log Out".
Эти методы не требуются в соответствии с Основным стандартом аутификации HTTP , так что Вы никогда не должны зависеть от этого. Тестирование с Lynx показало, что Lynx не очищает информацию аутификации с 401 ответом сервера, так что переход обратно и затем вперед снова откроет ресурс (пока требования удостоверения личности не изменились).

Также обратите внимание, что это не работает при использовании сервера Microsoft's IIS и CGI версии PHP из-за ограничений IIS.
Создание GIF-файлов с помощью PHP

PHP не ограничен созданием только HTML вывода. Он может также использоваться для создания файлов GIF, или даже более удобные потоки изображений GIF. Для этого вам надо скомпилировать PHP с библиотекой функций изображения - GD .
Пример 2-2. Создание GIF-файлов с помощью PHP
<?php
    Header("Content-type: image/gif");
    $string=implode($argv," ");
    $im = imagecreatefromgif("images/button1.gif");
    $orange = ImageColorAllocate($im, 220, 210, 60);
    $px = (imagesx($im)-7.5*strlen($string))/2;
    ImageString($im,3,$px,9,$string,$orange);
    ImageGif($im);
    ImageDestroy($im);
?>
     

Этот пример вызывается со страницы тегом: <img src="button.php3?text"> Вышеупомянутый скрипт button.php3 берет строку "text", накладывает сверху на основное изображение, которым в этом случае является " images/button1.gif " и выводит возникающее в результате изображение. Это - очень удобный способ не рисовать новые изображения кнопки, каждый раз, когда вы хотите изменить текст кнопки. Этим методом они будут динамически сгенерированы.
Поддержка file upload
PHP может принимать файлы, загруженные из любого браузера, отвечающего стандартам RFC-1867 (которыми являются, например, Netscape Navigator 3 или cтарше, Microsoft Internet Explorer 3 с исправлениями от Microsoft, или cтарше). Эта возможность позволяет людям загружать файлы. С PHP-аутификацией и функциями манипулирования файлами, вы имеете полный контроль над тем, кому позволять загружать файлы и что должно быть выполнено с файлом, если он был загружен.

Экран загрузки файла может быть организован созданием специальной формы, которая выглядит примерно так:
Пример 2-3. Форма загрузки файла
<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <INPUT NAME="userfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
_URL_ должен указать на php html файл. Cкрытое поле MAX_FILE_SIZE должно предшествовать полю ввода файла и означает максимально допустимый размер файла. Значение определяется в байтах. Для этого файла при успешной загрузке будут определены следующие переменные : $userfile - Временное имя файла под которым загруженный файл загружается в машину сервера.

$userfile_name - Исходное имя файла в системе отправителя.

$userfile_size - Размер загруженного файла в байтах.

$userfile_type - Тип MIME файла, если броузер предоставил эту информацию. Например может быть "image/gif". Обратите внимание, что компонент вышеупомянутых переменных "$userfile" - это любое значение поля Name тега INPUT c TYPE=file обозначенное в форме загрузки. В приведенном выше примере формы загрузки мы назвали его "userfile".

По умолчанию файлы будут сохранены в заданном по умолчанию временном каталоге сервера. Его можно изменить, установкой переменной среды TMPDIR в среде, в которой PHP выполняется. Хотя, использование при ее установке обращения PutEnv () изнутри сценария PHP не будет работать.

Скрипт PHP, который получает загруженный файл, должен определить, что должно быть выполнено с загруженным файлом. Вы можете, например, использовать переменную $file_size, чтобы отбросить любые файлы, которые являются или слишком маленькими или слишком большими. Вы могли бы использовать переменную $file_type, чтобы отбросить любые файлы, которые не соответствуют некоторым критериям типа. В любом случае, вы должны или удалить файл из временного каталога или переместить эго в другое место.
Файл будет удален из временного каталога в конце запроса, если он не перемещен или переименован.

Пожалуйста обратите внимание, что вебсервер CERN httpd, кажется, удаляет все начинающееся с первого пробела в заголовке content-type mime, полученном от клиента. Пока дело обстоит так, CERN httpd не будет поддерживать возможность загрузки файла.
Поддержка HTTP cookie

PHP поддерживает HTTP cookies. Cookies - механизм для сохранения данных в удаленном браузере и, таким образом, - трэкинг или идентификация пользователей. Вы можете устанавливать файлы cookie используя функцию setcookie(). Cookies - часть HTTP заголовка, так что функция SetCookie() должна вызваться прежде чем браузеру послан какая-нибудь информация для вывода. Это - то же самое ограничение, которое касается и функции Header().

Любой cookie, посланный Вам от клиента будет автоматически превращен в переменную PHP точно так же как данные методов GET и POST. Если вы желаете назначить множественные значения одиночному cookie - просто добавьте [] к имени cookie. Для более подробной информации см. функцию setcookie ().
Поддержка баз данных

PHP поддерживает ряд различных баз данных, и в режиме работы в собственной системе команд и через ODBC, включая:
Adabas D
                  MySQL
dBase
                  Oracle
Empress
                  PostgreSQL
FilePro
                  Solid
Informix
                  Sybase
InterBase
                  Velocis
mSQL
                  Unix dbm
Регулярные выражения
Регулярные выражения используются для сложного манипулирования строками в PHP. Функции, которые поддерживают регулярные выражения:
          ereg()

          ereg_replace()

          eregi()

          eregi_replace()

          split()

Все эти функции принимают строку регулярного выражения как их первый параметр. PHP использует расширенные регулярные выражения POSIX как определено в POSIX 1003.2. Для полного описания регулярных выражений POSIX см. соответствующие разделы руководства (regex), в каталоге regex дистрибутива PHP.
Example 2-4. Пример регулярных выражений
ereg("abc",$string);           
/* Возвращает 'истина', если "abc"
   найдено в строке $string. */

ereg("^abc",$string);
/* Возвращает 'истина', если "abc"
   найдено в начале строки $string. */

ereg("abc$",$string);
/*  Возвращает 'истина', если "abc"
   найдено в конце строки $string. */

eregi("(ozilla.[23]|MSIE.3)",$HTTP_USER_AGENT); 
/*  Возвращает 'истина', если браузер клиента
   - Netscape 2, 3 или MSIE 3. */

ereg("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)",
     $string,$regs);
/* Помещает три слова - $regs[1], $regs[2] и $regs[3], разделенные пробелом. */

ereg_replace("^","<BR>",$string);
/* Устанавливает тег <BR> в начало строки $string. */

ereg_replace("$","<BR>",$string);
/* Устанавливает тег <BR> в конец строки $string. */

ereg_replace("\n","",$string);
/* Отсекает символ "возврат каретки" в строке $string. */
Обработка ошибок
В PHP есть 4 типа ошибок и предупреждений. Это:

1 - Нормальные Ошибки Функции(Normal Function Errors)

2 - Нормальные Предупреждения(Normal Warnings)

4 - Ошибки Синтаксического Анализатора(Parser Errors)

8 - Уведомления(Notices) : предупреждения, которые Вы можете проигнорировать но, которые могут подразумевать баги в вашем коде

Эти 4 типа комбинируются при определении ошибки, сообщая уровень. Ошибка по умолчанию, возвращает уровень 7, который является комбинацией 1 + 2 + 4, или все ошибки за исключением примечаний. Этот уровень может быть изменен в файле php3. ini директивой error_reporting. Он также может быть установлен в вашем файле Apache httpd.conf директивой php3_error_reporting, или же это может быть произведено во времени выполнения сценария, с использованием функции error_reporting ().

Все выражения PHP могут также вызываться с префиксом "@", который выключает сообщение об ошибке, специфичное для этого выражения. Если ошибка произошла во время выполнения такого выражения, и допускается возможность track_errors, Вы можете найти сообщения об ошибках в глобальной переменной $php_errormsg.
PHP source viewer

0

4

Код:
Глава 4. Конфигурация
Файл php3.ini 

Файл php3.ini читается при запуске синтаксического анализатора PHP. Для версий серверного модуля PHP, это случается только один раз, когда запускается веб-сервер. Для версии CGI это случается на каждом вызове. 

Только для каждой директивы указанной здесь, имеется соответствующая директива Apache в httpd.conf. Просто добавьте php3_ в начале имен директив, указанных здесь. 

Вы можете посмотреть установочные параметры большинства значений конфигурации вызвав функцию phpinfo(). 
Основные директивы конфигурации
auto_append_file string

Определяет имя файла, который автоматически проверяется после основного файла. Файл включается так же, как если бы была вызвана функция include(), с использованием include_path. 

Специальное значение none запрещает авто-добавление. 

Примечание: Если сценарий обрывается функцией exit(), авто-добавление не произойдет. 
auto_prepend_filestring

Определяет имя файла, который автоматически проверяется перед основным файлом. Файл включается так же, как если бы была вызвана функция include(), с использованием include_path. 

Специальное значение none запрещает авто-добавление. 
cgi_ext string
display_errors boolean

Это определяет, должны ли ошибки печататься на экране как часть HTML вывода или нет. 
doc_root string

Главный каталог("root directory") PHP на сервере. Используется только когда он не пустой. Если PHP сконфигурирован при помощи safe mode, то никакие другие файлы за пределами этого каталога не обслуживаются. 
engine boolean

Эта директива действительно полезна только в модуле PHP под Apache. Это используется на сайтах, где необходимо включать и выключать синтаксический анализ PHP на определенные каталоги и виртуальные серверы. Установкой php3_engine off в допустимом месте файла httpd.conf, PHP можно запрещать и разрешать.
error_log string

Имя файла, куда сохраняется журнал ошибок(log file) сценариев. Если используется специальное значение syslog, ошибки отправляются в системный журнал(system logger). В UNIX'е это syslog(3), а в Windows NT это журнал событий (event log). Системный журнал не поддерживается в Windows 95. 
error_reporting integer

Устанавливает уровень сообщений об ошибках. Параметр является целым, представляющим битовую область. Добавьте те значения уровней сообщений об ошибках, которые Вы хотите. 

Таблица 4-1. Уровни сообщений об ошибкахbit value	допустимые сообщения
1	нормальные ошибки
2	нормальные предупреждения
4	ошибки синтаксического анализатора
8	некритичные предупреждения стиля

Значение по умолчанию - 7 (показываются нормальные ошибки, нормальные предупреждения и синтаксические ошибки). 
open_basedir string 

Ограничивает файлы, которые могут открываться PHP в определенном директории-дереве. 

Когда сценарий пытается открыть файл с помощью, например, fopen или gzopen, наличие/расположение файла проверяется. Когда файл находится за пределами определенного директория-дерева, PHP откажется открыть его. Все символьные ссылки определены, так что нет возможности избежать этого ограничения с помощью symlink. 

Специальное значение . показывает что каталог, в котором находится сценарий, используется как основной каталог.

По умолчанию допускается открытие всех файлов. 
gpc_order string 

Устанавливает допустимость GET/POST/COOKIE в анализе. Установка по умолчанию этой директивы - "GPC". Установка ее в "GP", например, вынудит PHP полностью игнорировать cookies и перезапишет любые переменные метода GET переменными метода POST с одинаковыми именами. 
include_path string 

Определяет список каталогов где будут располагаться файлы для функций require() , include() и fopen_with_path() . Формат подобен формату системной переменной окружения PATH : список каталогов разделяется двоеточием в UNIX или точкой с запятой в Windows. 
Пример 4-1. UNIX include_path 
include_path=.:/home/httpd/php-lib

Пример 4-2. Windows include_path 
include_path=".;c:\www\phplib"

Значением по умолчанию этой директивы является . (только текущий каталог). 
isapi_ext string 

log_errors boolean 

Сообщает, что независимые сообщения об ошибке сценария должны регистрироваться в журнале ошибок сервера. Этот выбор таким образом является специфичным для сервера. 
magic_quotes_gpc boolean 

Устанавливает magic_quotes состояние для GPC (Get/Post/Cookie) операций. Когда magic_quotes включено (on), все ' (одиночные кавычки), " (двойные кавычки), \ (обратные слэши) и нулевые значения (NUL's) записываются с обратной косой чертой автоматически. Если также включено magic_quotes_sybase, одиночная кавычка записывается с дополнительной одиночной кавычкой вместо обратной косой черты. 
magic_quotes_runtime boolean 

Если magic_quotes_runtime разрешено, большинство функций, которые возвращают данные из любого внешнего источника разной природы, включая базы данных и текстовые файлы, будут иметь кавычки, записанные с обратной косой чертой. Если magic_quotes_sybase также включены, одиночная кавычка записывается с дополнительной одиночной кавычкой вместо обратной косой черты. 
magic_quotes_sybase boolean 

Если magic_quotes_sybase также разрешено, одиночная кавычка записывается с дополнительной одиночной кавычкой вместо обратной косой черты, если magic_quotes_gpc или magic_quotes_runtime разрешены. 
max_execution_time integer 

Эта установка определяет максимальное время в секундах допустимое для сценария, прежде чем он будет прекращен анализатором. Это помогает предохраниться от плохо/некорректно написанных сценариев. 
memory_limit integer 

Эта установка определяет максимальный размер памяти в байтах, допустимый для этого сценария. Это помогает запретить плохо/некорректно написанным сценариям использовать всю доступную память на сервере. 
nsapi_ext string 

short_open_tag boolean 

Задает допустимость короткой формы ( <? ?> тегов PHP . Если вы хотите использовать PHP совместно с XML, эту опцию необходимо отключить. Если опция отключена, вы должны использовать длинную форму тегов ( <?php ?> ). 
sql.safe_mode boolean 

track_errors boolean 

Если опция разрешена, последнее сообщение об ошибке всегда будет представлена в глобальной переменной $php_errormsg. 
track_vars boolean 

Если опция разрешена, входящая информация GET, POST и cookie может быть найдена в глобальных ассоциативных массивах $HTTP_GET_VARS , $HTTP_POST_VARS и $HTTP_COOKIE_VARS , соответственно. 
upload_tmp_dir string 

Временный каталог, используемый для хранения файлов при их загрузке на сервер. Должен допускать запись, независимо от того, каким пользователем PHP используется. 
user_dir string 

Основное имя каталога, используемого в домашнем каталоге пользователей для файлов PHP, например public_html . 
warn_plus_overloading boolean 

Если разрешено, эта опция выдает при выводе PHP сообщение когда оператор плюс( + ) используется в строке. Это должно облегчить поиск сценариев, которые должны быть перезаписаны с заменой на ( . ) - string concatenator. 
Директивы Конфигурации Почты 

SMTP string 

Имя DNS или IP адрес сервера SMTP, который должен использоваться PHP под Windows для отправки сообщения функцией mail() . 
sendmail_from string 

Определяет "From:" - почтовый адрес, который используется в сообщении, отправленном PHP под Windows. 
sendmail_path string 

Указывает где может быть найдена программа sendmail , обычно это /usr/sbin/sendmail или /usr/lib/sendmail 
configure делает честную попытку определить это за вас и устанавливает значение по умолчанию, но в случае неудачи вы можете установить это здесь. 

Системы не использующие sendmail должны установить оболочку/замену sendmail их предлагаемой системой почты, если имеется. Например, Qmail пользователи могут указать /var/qmail/bin/sendmail . 
Директивы Конфигурации Safe Mode 

safe_mode boolean 

Устанавливает допустимость PHP safe mode. Читайте главу Безопасность (Security) для большей информации 
safe_mode_exec_dir string 

Если PHP используется в safe mode, system() и другие функции, выполняющие системные программы, отказываются запускать программы, которые находятся не в этом каталоге. 
Debugger Configuration Directives 

debugger.host string 

DNS-имя или IP-адрес хоста используемого отладчиком. 
debugger.port string 

Номер порта используемого отладчиком. 
debugger.enabled boolean 

Задает допустимость использования отладчика. 
Директивы Загрузки Расширений(Extension Loading) 

enable_dl boolean 

Эта директива действительно полезна только в модуле PHP под Apache. Вы можете разрешать/запрещать динамическую загрузку расширений PHP функцией dl() раздельно по каталогам и/или по виртуальным серверам. 

Основная причина для выключения динамической загрузки - безопасность. С динамической загрузкой, можно игнорировать все ограничения safe_mode и open_basedir. 

По умолчанию динамическая загрузка должна допускаться, за исключением случаев, когда используется safe-mode. В safe-mode всегда недопустимо использование dl() . 
extension_dir string 

В каком каталоге PHP должен искать динамически загружаемые расширения. 
extension string 

Какие динамически загружаемые расширения загрузить, при запуске PHP. 
Директивы конфигурации MySQL 

mysql.allow_persistent boolean 

Допустить постоянные/устойчивые MySQL соединения. 
mysql.max_persistent integer 

Максимальное число постоянных MySQL соединений за один процесс. 
mysql.max_links integer 

Максимальное число MySQL соединений за процесс, включая постоянные соединения. 
Директивы конфигурации mSQL 

msql.allow_persistent boolean 

Допустить постоянные mSQL соединения. 
msql.max_persistent integer 

The maximum number of persistent mSQL connections per process. 
msql.max_links integer 

Максимальное число постоянных mSQL соединений за один процесс. 
Директивы конфигурации Postgres 

pgsql.allow_persistent boolean 

Допустить постоянные/устойчивые соединения Postgres. 
pgsql.max_persistent integer 

Максимальное число постоянных соединений Postgres за процесс. 
pgsql.max_links integer 

Максимальное число Postgres соединений за процесс, включая постоянные соединения. 
Директивы Конфигурации Sybase 

sybase.allow_persistent boolean 

Допустить постоянные Sybase соединения. 
sybase.max_persistent integer 

Максимальное число постоянных Sybase соединений за процесс. 
sybase.max_links integer 

Максимальное число Sybase соединений за процесс, включая постоянные соединения. 
Директивы Конфигурации Sybase-CT 

sybct.allow_persistent boolean 

Допустить постоянные Sybase-CT соединения. По умолчанию включено. 
sybct.max_persistent integer 

Максимальное число постоянных Sybase-CT соединений за процесс. По умолчанию значение -1 означающее неограниченное количество. 
sybct.max_links integer 

Максимальное число Sybase-CT соединений за процесс, включая постоянные соединения. По умолчанию значение -1 означающее неограниченное количество.
sybct.min_server_severity integer 

Сообщения Сервера со степенью более чем или равной sybct.min_server_severity будут сообщены как предупреждения. Эта величина может также устанавливаться из сценария вызовом sybase_min_server_severity() . Значение по умолчанию - 10 , которое сообщает ошибки строгости информации, или выше. 
sybct.min_client_severity integer 

Сообщения библиотеки Клиента со строгостью более чем или равной sybct.min_client_severity будут сообщены как предупреждениях. Эта величина может также устанавливаться из сценария вызовом sybase_min_client_severity() . По умолчанию - 10, что эффективно запрещает вывод. 
sybct.login_timeout integer 

Максимальное время (в секундах) ожидания повторной попытки соединения, прежде чем будет отказ. Имейте в виду, что если max_execution_time превышен когда время попытки соединения закончится, ваш сценарий будет расторгнут прежде, чем будут предприняты какие-либо действия на случай отказа. По умолчанию - одна минута. 
sybct.timeout integer 

Максимальное время(в секундах)ожидания окончания select_db или выполнения запроса. Имейте в виду, что если max_execution_time превышен, когда время функционирования истекает, ваш сценарий будет расторгнут прежде, чем будут предприняты какие-либо действия на случай отказа. По умолчанию не ограничено. 
sybct.hostname string 

Имя хоста, с которым вы хотите соединиться, для показа sp_who. По умолчанию - none. 
Директивы Конфигурации BC Math 

bcmath.scale integer 

Количество десятичных цифр для всех функций bcmath. 
Директивы Конфигурации Возможностей Броузера 

browscap string 

имя файла возможностей браузера. 
Директивы Конфигурации Унифицированных ODBC 

uodbc.default_db string 

ИСТОЧНИК ДАННЫХ ODBC, для использования, если ничего не определено в odbc_connect() или odbc_pconnect() . 
uodbc.default_user string 

Имя пользователя, используемое если нет определений в odbc_connect() или odbc_pconnect() . 
uodbc.default_pw string 

Пароль, используемый, если не определено в odbc_connect() или odbc_pconnect() . 
uodbc.allow_persistent boolean 

Допустить постоянные/устойчивые ODBC соединения. 
uodbc.max_persistent integer 

Максимальное число постоянных ODBC соединений за процесс. 
uodbc.max_links integer 

Максимальное число ODBC соединений за процесс, включая постоянные соединения. 
Модуль Apache 
Директивы конфигурации модуля Apache 

Модуль CGI переадресации module/action 

CGI 

Виртуальные хосты 

Безопасность 

PHP - мощный язык и интерпретатор, независимо от того, включен ли он в веб-сервер как модуль или выполняется как разделение исполнимых файлов(binary) CGI, он может иметь доступ к файлам, выполнять команды и открывать сетевые соединения на сервере. Эти свойства дают возможность выполнять что-нибудь на веб-сервере небезопасное по умолчанию. 
PHP разработан специально для того чтобы быть более безопасным языком для написания программ CGI, чем Perl или C.
С правильным выбором compile-time и runtime опций конфигурации он дает вам как раз ту комбинацию свободы и безопасности, которая вам нужна. 

Как есть много разных путей использования PHP, есть и большой выбор конфигураций, управляющих поведением PHP. Большой выбор опций гарантирует, что вы можете использовать PHP для многих целей, но это также означает что есть комбинации этих опций и, также, конфигураций сервера, которые заканчиваются небезопасной установкой. Эта глава объясняет различные комбинации опций конфигурации и ситуации, в которых они могут быть удачно использованы. 
CGI binary 
Возможные атаки 

Использование PHP как исполнимых файлов CGI - выбор для установок, которые по некоторой причине не хотят внедрить PHP как модуль в программное обеспечение сервера (подобно Apache), или PHP будет использоваться с другими типами оболочек CGI, чтобы создать надежное окружение chroot и setuid для сценариев. Эта установка обычно включает установку выполняемого(binary) PHP в каталог cgi-bin на веб-сервере. Бюллетень CERT CA-96.11 рекомендует кроме того, устанавливать любые интерпретаторы в cgi-bin. Даже если исполнимый PHP может быть использован в качестве автономного интерпретатора, PHP разработан для того чтобы предохранить от атаки, которую эта установка делает возможной: 


Доступ к системным файлам: http://my.host/cgi-bin/php?/etc/passwd 

Информация запроса в url после знака вопроса (?) проходит как аргументы командной строки интерпретатору через интерфейс CGI. Обычно переводчики открывают и выполняют файл указанный как первый аргумент в командной строке. 

Вызванный как исполняемый CGI-файл, PHP отказывается интерпретировать командные аргументы строки. 

Доступ к любым веб-документам на сервере: http://my.host/cgi-bin/php/secret/doc.html 

Часть URL с информацией о пути, стоящая после имени PHP-файла, /secret/doc.html обычно используется, чтобы определить имя файла, который должен открываться и интерпретироваться CGI программой. Обычно некоторые директивы конфигурации веб-сервера(Apache: Action) используются, чтобы перенаправить запросы к документам подобно http://my.host/secret/script.php3 на PHP интерпретатор. С такой установкой веб-сервер сначала проверяет разрешения доступа в каталоге /secret , и потом создает запрос перенаправления http://my.host/cgi-bin/php/secret/script.php3 . 
К несчастью, если запрос не дается изначально в этой форме, веб-сервер не проверяет доступ к файлу /secret/script.php3 , но только для файла /cgi-bin/php . Таким образом любой пользователь, имеющий доступ к /cgi-bin/php , получает доступ к любым защищенным документам на сервере. 

В PHP, опция compile-time конфигурации --enable-force-cgi-redirect и директивы runtime-конфигурации doc_root и user_dir может использоваться для того чтобы отразить эту атаку, если дерево документов сервера имеет любые директории с ограничениями доступа. Смотрите ниже для полного объяснения других комбинаций. 
Вариант 1: обслуживаются только общие(public) файлы 

Если ваш сервер не имеет какой-либо информации, которая не ограничивается паролем или управлением доступом на основе ip, нет потребности в этих опциях конфигурации. Если ваш веб-сервер не позволяет вам производить перенаправление, или сервер не имеет пути, чтобы связаться с исполнимым PHP, который запрашивает благополучно перенаправленный запрос, вы можете указать опцию --disable-force-cgi-redirect для конфигурирования сценария. 
Вы все еще должны убедиться, что ваши сценарии PHP не полагаются на этот или другой путь вызова сценария, ни непосредственно http://my.host/cgi-bin/php/dir/script.php3, ни переадресацией http://my.host/dir/script.php3. 

Перенаправление может быть сконфигурировано, например в Apache, директивами AddHandler и Action (см. ниже). 
Вариант 2: использование --enable-force-cgi-redirect 

Эта compile-time опция предохраняет от вызова PHP напрямую с URL подобно http://my.host/cgi-bin/php/secretdir/script.php3. Вместо того чтобы выполнить запрос, PHP выполняет только грамматический разбор в этом способе если он выполнил правила перенаправления вебсервера. 

Обычно переадресация в конфигурации Apache сделана со следующими директивами: 
Action php3-script /cgi-bin/php
AddHandler php3-script .php3

Эта опция была протестирована только с веб-сервером Apache, и полагается на Apache чтобы установить не-стандартную внешнюю переменную CGI REDIRECT_STATUS для перенаправленных запросов. Если ваш сервер паутины не поддерживает какого-либо способа сообщать что запрос прямой или перенаправленный, Вы не можете использовать эту опцию и Вы должны использовать один из других путей запуска версии CGI, документированной здесь. 
Вариант 3: установка doc_root или user_dir 

Размещение активного содержания, такого как скрипты и модули, в каталогах документов веб-сервера иногда является небезопасной практикой. Если при некоторой ошибке конфигурации сценарии не выполняются, они отображаются как обычные HTML документы, что может закончиться утечкой интеллектуальной собственности или информации безопасности подобно паролям. Поэтому многие сисадмины предпочитают устанавливать другие каталоги для сценариев, которые будут доступны только через PHP CGI и, следовательно, всегда проинтерпретированы и не отображены как таковые. 

Также, если недоступен метод перенаправления неуверенных запросов, как описано в предыдущем разделе, необходимо установить корневой каталог(doc_root) сценариев, который отличается от корневого каталога веб-документов. 

Вы можете установить корневой каталог для скриптов директивой конфигурации doc_root в файле php3.ini , или вы можете установить переменную окружения PHP_DOCUMENT_ROOT. Если это установлено, CGI-версия PHP всегда будет добавлять doc_root и путь к файлу в запросах, так что вы всегда будете уверенны что за пределами этого каталога скрипты выполняться не будут (кроме user_dir //см.ниже). 

Другая используемая опция - user_dir. Когда user_dir - не установлена, открытием файла управляет только doc_root. Открытие URL подобно http://my.host/~user/doc.php3 не даст результата при открытии файла из каталога пользователя, но вызывается файл ~user/doc.php3 из каталога doc_root (да,имя каталога начинается с тильды [~]). 

Если user_dir установлена, например как public_php, запрос, подобный http://my.host/~user/doc.php3 откроет файл doc.php3 в каталоге public_php домашнего каталога пользователя. Если это /home/user, то выполняется /home/user/public_php/doc.php3. 

user_dir задается независимо от doc_root, так что вы можете контролировать доступ к document root и user directory отдельно. 
Вариант 4: PHP синтаксический анализатор вне дерева web 

Очень безопасная опция должна установить синтаксический анализатор PHP где-нибудь вне дерева файлов web. В /usr/local/bin, например. Обратная сторона этой опции заключается в том что вы должны вставлять строку подобно: 

#!/usr/local/bin/php
       

в первую строку любого документа, содержащего PHP тэги. Кроме того, вы должны сделать файлы выполнимыми. Точно так же, как Вы поступаете с любым другим сценарием CGI записанным в Perl или sh или любом другом языке, который использует #! shell-escape механизм для самозапуска. 

Чтобы PHP получил возможность корректно оперировать с PATH_INFO и PATH_TRANSLATEDпри такой установке, php анализатордолжен быть скомпилирован с опцией конфигурации --enable-discard-path 
Модуль Apache

Когда PHP используется как Apache модуль, не наследуются права пользователя Apache (обычно таковые - "nobody").

0

5

Код:
Глава 5. Синтаксис и грамматика

Синтаксис PHP заимствован непосредствено из C.   Java и Perl также повлияли на синтаксис данного языка. 
Переход из HTML

Есть три способа выхода из HTML и перехода в "режим PHP кода": 
Пример 5-1. Способы перехода из HTML
1.  <? echo("простейший способ, инструкция обработки SGML\n"); ?>

2.  <?php echo("при работе с XML документами делайте так\n"); ?>

3.  <script language="php"> 
        echo ("некоторые редакторы (подобные FrontPage) не
               любят обрабатывающие инструкции");
    </script>;

4.  <% echo("От PHP 3.0.4 можно факультативно применять ASP-тэги"); %>
     

Разделение инструкций

Инструкции (утверждения) разделяются также как в C или Perl - точкой с запятой. 

Закрывающий тэг (?>) тоже подразумевает конец утверждения, поэтому следующие записи эквивалентны: 
<php
    echo "Это тест";
?>

<php echo "Это тест" ?>
     
Типы переменных

PHP поддерживает переменные следующих типов: 
integer - целое
double  - число с дробной частью
string  - строковая переменная
array  - массив
object - объектная переменная
pdfdoc - PDF-документ (только при наличии поддержки PDF) 
pdfinfo - PDF-инфо (только при наличии поддержки PDF) 

Тип переменной обычно не устанавливается программистом; вместо этого, он определяется PHP во время выполнения программы, в зависимости от контекста в котором данная переменная используется. 

Если вам нравится указывать тип переменной непосредственно, вы можете использовать для этого инструкцию cast либо функцию settype(). 

Учтите, что переменная может вести себя по разному  в определенных ситуациях, в зависимости от того, какой тип определен для нее в данное время. Более подробно это описано в разделе Изменение типа. 
Инициализация переменной

Для инициализации переменной в PHP  вы просто присваиваите ей значение. Для большинства переменных это именно так; для массивов и объектных переменных, однако, может использоваться несколько иной механизм. 
Инициализация Массивов

Массив может инициализироваться одним из двух способов: последовательным присвоением значений, или посредством конструкции array() (которая описана в разделе Функции Массивов). 

При последовательном добавлении значений в массив вы просто записываете значения элементов массива, используя пустой индекс. Каждое последующее значение будет добавляться в качестве последнего элемента массива. 
$names[] = "Jill";   // $names[0] = "Jill"
$names[] = "Jack";   // $names[1] = "Jack"
      

Как в C и Perl, элементы массива нумеруются начиная с 0, а не с 1. 
Инициализация объектов

Для инициализации объектной переменной используйте новое предписание для сопоставления данного объекта объектной переменной. 
class foo {
    function do_foo () { 
        echo "Doing foo."; 
    }
}

$bar = new foo;
$bar -> do_foo ();
      
Область Переменной

Областью переменной является контекст, внутри которого она определена. Главным образом, все переменные PHP имеют одну область. Однако, внутри функций определенных пользователем, представлена локальная область функции. Любая переменная, определенная внутри функции, по умолчанию ограничена локальной областью функции. Например: 
 
$a = 1; /* глобальная область */ 

Function Test () { 
    echo $a; /* ссылка на переменную локальной области */ 
} 

Test ();
    

Этот скрипт не выдаст что-либо на выходе, поскольку инструкция echo относится к локальной версии переменной $a, значение которой присваивается не внутри этой области. Вы можете заметить, что здесь имеется некоторое отличие от языка C, в том что глобальные переменные в C автоматически действуют и внутри функций,   если только они не переписываются локальными определениями. Это может вызвать некоторые проблемы, т.к. по неосторожности можно изменить глобальную переменную. В PHP глобальные переменные должны быть продекларированы глобально внутри функции, если предполагается их использование в данной функции.  Например: 
$a = 1;
$b = 2;

Function Sum () {
    global $a, $b;

    $b = $a + $b;
} 

Sum ();
echo $b;
    

Вышеописанный скрипт выдаст значение "3". Поскольку $a и $b декларируются глобально внутри функции, ссылки на данные переменные трактуются как ссылки на их глобальные версии. Нет ограничений на количество глобальных переменных, которыми можно манипулировать внутри функции. 

Вторым способом доступа к переменным из глобальной области является использование специального опеределяемого PHP массива $GLOBALS. При этом предыдущий пример может быть записан как: 
$a = 1;
$b = 2;

Function Sum () {
    $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
} 

Sum ();
echo $b;
    

Массив $GLOBALS является ассоциативным массивом, в котором имя глобальной переменной является ключом, а значение этой переменной является значением элемента массива. 

Другой важной характеристикой от области определения переменной является  статическая переменная. Статическая переменная существует только в локальной области функции, но она не теряет своего значения когда программа, при исполнении, покидает эту область. Рассмотрим следующий пример: 
Function Test () {
    $a = 0;
    echo $a;
    $a++;
}
    

Эта функция совершенно бесполезна практически, поскольку каждый раз при ее вызове она устанавливает $a в 0 и выводит "0".   Выражение $a++ , которое увеличивает значение переменной, так же бесполезно, поскольку при выходе из функции переменная $a исчезает. Для придания дееспособности функции подсчета, которая не теряла бы нить текущего счета, переменная $a декларируется как статическая:
Function Test () {
    static $a = 0;
    echo $a;
    $a++;
}
    

Теперь, каждый раз при вызове функции Test() она будет выводить значение $a и увеличивать его.

Статические переменные также весьма существенны, когда функции вызываются рекурсивно. Рекурсивные функции - это те, которые вызывают сами себя. Составлять рекурсивную функцию нужно внимательно, т.к. при неправильном написании можно сделать рекурсию неопределенной. Вы должны быть уверены в адекватности способа прекращения рекурсии. Следующая простая функция рекурсивно считает до 10: 
Function Test () {
    static $count = 0;

    $count++;
    echo $count;
    if ($count < 10) {
        Test ();
    }
    $count--;
}
    
Изменяемые переменные

Иногда бывает удобно давать переменным изменяемые имена. Такие имена могут изменяться динамически. Обычная переменая устанавливается так: 
$a = "hello";
    

Изменяемая переменная берет некое значение и обрабатывает его как имя переменной. В приведенном выше примере значение hello может быть использовано как имя переменной, посредством применения двух записанных подряд знаков доллара, т.е.: 
$$a = "world";
    

С этой точки зрения, две переменных определены и сохранены в символьном дереве PHP: $a с содержимым "hello" и $hello с содержимым "world". Так, инструкция: 
echo "$a ${$a}";
    

осуществляет то же самое, что и инструкция: 
echo "$a $hello";
    

а именно, обе они выводят: hello world. 

Чтобы использовать изменяемые переменные с массивами, необходимо решить проблему неоднозначности. Это означает, что если вы пишете $$a[1], то синтаксическому анализатору необходимо знать, имеете ли вы в виду использовать $a[1] как переменую, или вы предполагаете $$a  как переменную а [1] как индекс этой переменной. Синтаксис для разрешения подобной неоднозначности такой: ${$a[1]} для первого случая и ${$a}[1] для второго. 
Переменные вне PHP
HTML Формы (GET и POST)

Когда программой-обработчиком формы является PHP-скрипт, переменные этой формы автоматически доступны для данного скрипта PHP. Например, рассмотрим следующую форму: 
Пример 5-2. Простая переменная формы
<form action="foo.php3" method="post">
    Name: <input type="text" name="name"><br>
    <input type="submit">
</form>
      


При активизации формы PHP создаст переменную $name, значением которой будет то содержимое, которое было введено в поле Name: данной формы. 

PHP также воспринимает массивы в контексте переменных формы, но только одномерные. Вы можете, например, группировать взаимосвязанные переменные вместе или использовать это свойство для определения значений переменных при множественном выборе на входе:
Пример 5-3. Более сложные переменные формы
<form action="array.html" method="post">
    Name: <input type="text" name="personal[name]"><br>
    Email: <input type="text" name="personal[email]"><br>
    Beer: <br>
    <select multiple name="beer[]">
        <option value="warthog">Warthog
        <option value="guinness">Guinness
        </select>
    <input type="submit">
</form>
      


Если PHP-атрибут track_vars включен, через установку конфигурации track_vars или директивой <?php_track_vars?>, тогда переменные, активизированные посредством методов POST или GET, будут также находиться в глобальных ассоциативных массивах $HTTP_POST_VARS и $HTTP_GET_VARS соответственно.
Имена переменных РИСУНКА АКТИВИЗАЦИИ

При активизации (запуске) формы можно использовать рисунок (изображение) вместо стандартной кнопки запуска, в тэге подобном этому:
<input type=image src="image.gif" name="sub">
      

Когда пользователь нажимает кнопку мыши где-либо над таким рисунком, сопровождающая форма передается на сервер с двумя дополнительными переменными, sub_x и sub_y. Они содержат координаты места нажатия кнопки мыши пользователем внутри данного рисунка. Можно отметить, что практически, реальные имена переменных передаваемые браузером, содержат точку вместо символа подчеркивания, но PHP конвертирует точку в элемент подчеркивания (underscore) автоматически. 
HTTP Кукисы

PHP очевидным образом поддерживает HTTP кукисы, как это определено в Netscape's Spec. Кукисы являются механизмом хранения данных в удаленном браузере, используемым для поддержки процедуры обмена или идентификации ответа   пользователя. Кукисы можно устанавливать используя функцию SetCookie(). Кукисы являются частью заголовка HTTP, поэтому функция SetCookie() должна вызываться прежде чем какие-либо передаваемые данные посылаются браузеру. Это такое же ограничение, как и для функции Header(). Любые кукисы, посылаемые вам клиентом, автоматически преобразовываются в переменные PHP, также как данные методов GET и POST.

Если необходимо назначить множественные значения одному кукису, просто добавьте квадратные скобки [ ] к имени кукиса. Например: 
SetCookie ("MyCookie[]", "Testing", time()+3600);
     

Учтите, что текущий кукис заменит предыдущий с тем же именем в вашем браузере, если только путь или домен не являются различными. Поэтому, при работе с программами обслуживания карт вы можете использовать для сохранения данных счетчик и посылать его значения дальше и т.п. 
Пример 5-4. Пример функции SetCookie 
$Count++;
SetCookie ("Count", $Count, time()+3600);
SetCookie ("Cart[$Count]", $item, time()+3600);
     

Переменные окружения

PHP автоматически создает переменные окружения, как и обычные переменные.
echo $HOME;  /* Показывает переменную окружения HOME, 
если она установлена. */
      

Хотя при поступлении информации механизмы GET, POST и Cookie также атоматически создают переменные PHP, иногда лучше явным образом прочитать переменную окружения, для того чтобы быть уверенным в получении ее правильной версии. Для этого может использоваться функция getenv(). Для установки значения переменной окружения пользуйтесь функцией putenv(). 
Директивы конфигурации сервера
Изменение типа

PHP не требует явного определения типа при объявлении переменной, тип переменной определяется по контексту в котором она используется. То есть, если вы присваиваете строковое значение переменной var, var становится строкой. Если затем присвоить переменной var значение целого (числа), то она станет целым.

Примером автоматического преобразования типа в PHP может служить оператор сложения '+'. Если какой-либо из оперендов является числом с дробной частью (тип double), то затем все операнды оцениваются как double и результат будет иметь тип double. Иначе, эти операнды будут интерпретированы как целые (integers) и результат будет так же иметь тип integer. Отметим, что при этом НЕ меняются типы самих операндов, меняется только оценка этих операндов.
$foo = "0";  // $foo является строкой (ASCII 48)
$foo++;      // $foo является строкой "1" (ASCII 49)
$foo += 1;   // $foo сейчас является целым (2)
$foo = $foo + 1.3;  // $foo сейчас имеет тип double (3.3)
$foo = 5 + "10 Little Piggies";    // $foo является целым (15)
$foo = 5 + "10 Small Pigs";   // $foo является целым (15)
     

Если последние два примера выше кажутся неясными, смотрите Преобразование строк. 

Если вы хотите чтобы переменная принудительно оценивалась как имеющая определенный тип, смотрите раздел Приведение типа. Если вы желаете изменить тип переменной, смотрите settype(). 
Определение типов переменных

Поскольку PHP определяет типы переменных и преобразует их (в общем) по мере необходимости, не всегда очевидно какой тип данная переменная имеет в какой-то отдельный момент. Поэтому PHP включает несколько функций, которые позволяют определить текущий тип переменной. Это функции gettype(), is_long(), is_double(), is_string(), is_array(), и is_object(). 
Приведение типа

Приведение типа работает в PHP во многом так же как в C: название требуемого типа записывается в круглых скобках перед переменной, которая должна быть приведена к данному типу. 
$foo = 10;   // $foo is an integer
$bar = (double) $foo;   // $bar is a double
      

Допускается следующее приведение типов: 
(int), (integer) - приведение к целому 
(real), (double), (float) - приведение к типу double 
(string) - приведение к строке 
(array) - приведение к массиву 
(object) - приведение к объектной переменной 

Заметим, что табуляция и пробелы допускаются внутри круглых скобок, поэтому следующее функционально эквивалентно: 
$foo = (int) $bar;
$foo = ( int ) $bar;
      
Преобразование строк

Когда строковая переменная оценивается как числовая, результирующее значение и тип переменной определяются следующим образом. 

Переменная string будет оценена как double, если она содержит любой из символов '.', 'e', или 'E'. Иначе она будет оценена как integer.

Данное значение задается начальной частью строковой переменной. Если строка начинается с допустимых цифровых данных, то это значение и будет использоваться. Иначе, будет значение 0 (ноль). Допустимые цифровые данные - это конструкция из факультативного символа, следующего за одной или несколькими цифрами (содержащими факультативно десятичную точку), обозначающего экспоненту. Экспонента может обозначаться символом 'e' или 'E', который может следовать за одной или несколькими цифрами. 
$foo = 1 + "10.5";      // $foo тип double (11.5)
$foo = 1 + "-1.3e3";    // $foo тип double (-1299)
$foo = 1 + "bob-1.3e3"; // $foo тип integer (1)
$foo = 1 + "bob3";      // $foo тип integer (1)
$foo = 1 + "10 Small Pigs";     // $foo тип integer (11)
$foo = 1 + "10 Little Piggies"; // $foo тип integer (11); 
                                // строка содержит 'e'
      

Дополнительную информацию смотрите в руководстве Unix страница для strtod(3). 
Манипуляции с массивом

PHP поддерживает как скалярные так и ассоциативные массивы. Фактически, между ними нет разницы. Вы можете создать массив используя функции  list() или array(), или можно явно задать значение каждого элемента массива.
 
$a[0] = "abc"; 
$a[1] = "def"; 
$b["foo"] = 13;
     

Можно также создать массив просто добавляя в него значения. 
 
$a[] = "hello"; // $a[2] == "hello"
$a[] = "world"; // $a[3] == "world" 
     

Массив может сортироваться функциями asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), и uksort() в зависимости от типа желаемой сортировки. 

Подсчет количества элементов массива осуществляется функцией count(). 

Перемещаться по массиву позволяют функции next() и prev(). Другим типовым способом перемещения по массиву является использование функции each().

0

6

Код:
Глава 6. Элементы языка

Любой скрипт PHP состоит из последовательности операторов. Оператор может быть присваиванием, вызовом функции, циклом, условным выражением или пустым выражением (ничего не делающим). Операторы обычно заканчиваются точкой с запятой. Также операторы могут быть объединены в группу заключением группы операторов в фигурные скобки. Группа операторов также является оператором. В этой части описаны различные типы операторов.
Константа

PHP определяет несколько констант и предоставляет механизм для определения Ваших констант. Константы похожи на переменные, но они имеют слегка изменЈнный синтаксис.

ПредопределЈнные константы - это __FILE__ and __LINE__, которые соответствуют имени файла и номеру строки, которая выполняется в настоящий момент.Пример 6-1. Использование __FILE__ и __LINE__
<?php
function report_error($file, $line, $message) {
    echo "An error occured in $file on line $line: $message.";
}

report_error(__FILE__,__LINE__, "Something went wrong!");
?>
     


Вы можете определить дополнительные константы с помощью функций define() и undefine() . Пример 6-2. Описание констант
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
undefine ("CONSTANT");
?>
     

Выражения

Выражения - это краеугольный камень PHP. В PHP почти всЈ является выражениями. Простейший и наиболее точный способ определить выражение - это "что-то, имеющее значение".

Простейший пример, приходящий на ум это константы и переменные. Когда вы печатаете "$a = 5", вы присваиваете значение '5' переменной $a. '5', очевидно, имеет значение 5, иными словами'5' это выражение со значением5 (в данном случае'5' это целочисленная константа). 

После этого присваивания вы считаете значением $a 5, также, если вы напишете $b = $a, вы будете ожидать того же как, если бы вы написали $b = 5. Другими словами, $a это также выражение со значением 5. Если всЈ написано правильно, то именно так оно и случиться.

Несколько более сложные примеры выражений - это функции. К примеру, подумайте на следующей функцией :
function foo () {
    return 5;
}
     

Подразумевая, что вы знакомы с концепциями функции (если нет, взгляните на часть, посвящЈнную функциям), вы считаете, что $c = foo() это практически то же самое, что написать $c = 5 и вы правы. Функции - это выражения с тем значением, которое они возвращают. Так как foo() возвращает 5, значение выражение 'foo()' - 5. Обычно функции подсчитывают возвращаемое значение,а не возвращают постоянное значение.

Конечно, значения в PHP не обязаны быть целыми и зачастую они не являются таковыми. PHP поддерживает 3 скалярных типа значений : целое, число с плавающей точкой и строки ( скалярные выражения вы не можете "разбить" на более маленькие части, как, к примеру, массивы). PHP поддерживает 2 составных (нескалярных) типа : массивы и объекты. Каждое из таких значений может быть присвоено переменной или возвращено функцией.

Итак, пользователи PHP/FI 2 не должны почувствовать каких-то перемен. PHP это язык, ориентированный на выражения, практически всЈ является выражениями.Обратимся к примеру, с которым мы уже разобрались, '$a = 5'. Легко заметить, что тут задействованы два значения - значение целой константы 5 и значение $a, которое также становиться равным 5.На самом деле здесь присутствует ещЈ одно значение, значение самого присваивания. Само присваивание становиться равным присваиваемому значению, в данном случае - 5.На практике это означает, что '$a = 5', не обращая внимания на то, что оно равно выражению со значением 5. То есть, запись типа '$b = ($a = 5)' похожа на запись'$a = 5; $b = 5;' (точка с запятой отмечает конец выражения). Так как присваивания рассматриваются справа налево, вы также можете написать '$b = $a = 5'. 

Другой хороший пример направления выражения это прежварительное и последующее увеличение и уменьшение. Рользователи PHP/FI 2 и многих других языков могут быть знакомы с записями variable++ and variable--. Это операторы увеличения и уменьшения. В PHP/FI 2, оператор '$a++' не имеет значения(не является выражением), поэтому вы не можете его присвоить или использовать как-либо иначе. PHP расширяет возможность увеличения/уменьшения делая его выражением, как и в C. В PHP, подобно C, есть 2 типа инкремента - предварительный и последующий. И предыдущий и последующий инкремент увеличивает значение переменной и воздействие на переменную идентично.Разница в значении выражения инкремента. Предыдущее увеличение, которое записывается как '++$variable', приравнивается увеличенной переменной (PHP увеличивает переменную до того, как прочитать еЈ значение). Post-increment, which is written '$variable++' evaluates to the original value of $variable, before it was incremented (PHP increments the variable after reading its value, thus the name 'post-increment'). 

Очень распространЈнный тип выражений это выражения сравнения. Эти выражения имеют значение 0 или 1 (означает ложь или истину соответственно). PHP поддерживает > (больше, чем), >= ( больше или равно), = (равно), < (меньше,чем) и <= (меньше или равно). Эти выражения в основном используются внутри условий, например оператора IF.

Последний пример выражений, с которыми мы разберЈмся, это совмещЈнные выражения оператор-присваивание. Вы уже знаете, что для того, чтобы увеличить значение $a на еденицу, вы можете написать '$a++' или '++$a'. Но если следует увеличить значение больше, чем на еденицу, к примеру - на 3? Вы можете написать '$a++' несколько раз, но это не очень удобно и эффективно. Намного больше распространено написание '$a = $a + 3'. '$a + 3' вычисляется, как значение $a плюс 3, а затем присваивается переменной $a, в результате чего значение $a увеличивается на 3. В PHP, также как и в ряде других языков типа C, вы можете записать это короче, что со временем бывает проще и быстрее также и для понимания. Добавление 3 к текущему значению $a может быть записано как '$a+=3'. Это значит следующее : 'возьми значение $a, добавь к нему 3 и присвой это обратно $a. Кроме того, что это быстрее и понятнее, такой тип выражений быстрее исполняется. Значение '$a+=3' как и значение обычного присваивания это присвоенное значение. Заметьте, что оно не равно 3, а является общим значением $a и 3. Любой бинарный (имеющий 2 операнда - прим. пер.) оператор может быть записан таким методом, например : '$a-=5' (вычесть 5 из значения $a), '$b*=7' (умножиить значение $a на 7) и так далее. 

Есть ещЈ такое выражение, которое может показаться незнакомым, если вы не встречались с ним в других языках - условный оператор с тремя операндами :

$first ? $second : $third

Если значение первого выражения истинно (не равно 0), то испольняется второе выражение и это является результатом данного условного выражения. Иначе исполняется третий оператор.

Этот пример должен помочь Вам лучше понять предварительное и последующее увеличение и вообще выражения ?

function double($i)    /* функция удваивания переменной */
{ 
  return $i*2; 
}
$b = $a = 5;    /* присваиваем значения переменым $a и $b */ 
$c = $a++;    /* последующее увеличение, присваиваем $c начальное значение $a (5)*/ 
$e = $d = ++$b;    /* предварительное увеличение, присваиваем $d и $e увеличенное значение$b (6) */
   /* тут и $d и$e равны6 */ 
$f = double($d++);    /* присвоить удвоенное значение $d до его увеличения, то есть 2*6 = 12, переменной $f*/ 
$g = double(++$e);    /* присвоить удвоенное значение $e после его увеличения, то есть 2*7 = 14, переменной g */ 
$h = $g += 10;    /* сначала увеличить значение $g на 10, что даЈт в результате 24, а затем присвоить это значение переменной $h, что также даЈт 24 */

В начале главы мы сказали, что объясним различные типы операторов и, как и было обещано выражения могут быть операторами. Впрочем, не каждое выражения является оператором. В данном случае оператор имеет форму 'выражение' ';', то есть выражение, за которым следует точка с запятой. В '$b=$a=5;' $a=5 это правильное выражение, но само по себе оно не является оператором. А вот '$b=$a=5;' является правильным оператором.

ЕщЈ одна вещь, которую нужно упомянуть - это логические значения выражений. Во многих случаях, в основном в условных операторах и операторах циклов, вы не заинтересованы в конкретных значениях выражений, а только являются ли их значения TRUE или FALSE (в PHP нет специального типа boolean). Логические значения вычисляются примерно так же, как я в языке Perl. Любое не нулевое целое значение - это TRUE, ноль - это FALSE. Обратите внимание на то, что отрицательные значения - это не ноль и поэтому они считаются равными TRUE. Пустая строка и строка '0' это FALSE; все остальные строки - TRUE. И насчЈт составных типов (массивы и объекты) - если значение такого типа не содержит элементов, то оно считается равным FALSE; иначе подразумевается TRUE.

PHP предоставляет полную и мощную реализацию выражений и подробное еЈ описание выходит за пределы этого руководства. ПриведЈнные выше примеры показали вам, что такое выражения и как вы можете построить реальные выражения. В остальной части руководства мы будем писать 'expr' для обозначения любого правильного выражения PHP.
IF

Структура IF это одна из важнейших возможностей многих языков, включая PHP. Она позволяет организовать выполнение фрагментов кода по условию. Возможности PHP по использованию выражения IF похожи на C:

if (expr) statement

Как объяснялось в части про выражения, вычисляется логический результат "expr" . Если expr равно TRUE, то PHP выполнит "statement", а если FALSE - проигнорирует.

Следующий пример выведет фразу 'a is bigger than b' если $a больше $b: 
if ($a > $b)
    print "a is bigger than b";

Зачастую Вам требуется исполнить больше чем одно выражение по условию. Конечно, не надо окружать каждое выражение конструкцией IF. Вместо этого вы можете сгруппировать несколько выражений в блок выражений. К примеру, слежующий код не только выведет фразу, но и присвоит значение $a переменной $b:

if ($a > $b) { print "a is bigger than b"; $b = $a; }

Выражение IF может иметь неограниченную степень вложенности в другие выражения IF, что позволяет Вам эффективно использовать выполнение по условию различных частей программы.
ELSE

Зачастую Вам требуется исполнить одно выражение, если соблюдается какое-либо условие и другое выражение в противном случае. Вот для этого применияется ELSE. ELSE расширяет возможности IF по части обработки вариантов выражения, когда оно равно FALSE. Данный пример выведет фразу 'a is bigger than b' если $a больше $b, и 'a is NOT bigger than b' в противном случае: 
 
if ($a > $b) { 
    print "a is bigger than b"; 
} else { 
    print "a is NOT bigger than b"; 
}
     

Выражение ELSE выполняется только если выражение IF равно FALSE, а если есть конструкции ELSEIF - то если и они также равны FALSE (см. ниже).
ELSEIF

ELSEIF, как и следует из его названия, является комбинацией IF и ELSE. ELSEIF как и ELSE позволяет выполнить выражение, если значение IF равно FALSE, но в отличие от ELSE оно выполнится только если выражение ELSEIF равно TRUE.К примеру, следующий код выведет 'a is bigger than b' если$a>$b, 'a is equal to b' если $a==$b, и 'a is smaller than b' если$a<$b: 
if ($a > $b) {
    print "a is bigger than b";
} elseif ($a == $b) {
    print "a is equal to b";
} else {
    print "a is smaller than b";
}
     

Внутри одного выражения IF может быть несколько ELSEIF. Первое выражение ELSEIF (если таковые есть), которое будет равно TRUE, будет выполнено. В PHP3 вы можете написать 'else if' (два слова), что будет значить то же самое, что и 'elseif' (одно слово).

Выражение ELSEIF будет выполнено только если выражение IF и все предыдущие ELSEIF равно FALSE, а данный ELSEIF равен TRUE.
Иной синтаксис для оператора IF : IF(): ... ENDIF;

PHP3 предлагает иной путь для группирования операторов с оператором IF. Наиболее часто это используется когда вы внедряете блоки HTML внутрь оператора IF, но вообще может использоваться где угодно. Вместо использования фигурных скобок за "IF(выражение)" должно следовать двоеточие, одно или несколько выражений и завершающий ENDIF. Рассмотрите слежующий пример :

<?php if ($a==5): ?> A = 5 <?php endif; ?> 

В этом примере блок "A = 5" внедрЈн внутрь выражения IF, используемого альтернативным способом. Блок HTML будет виден только если $a равно 5.statement written in the alternative syntax.

Этот альтернативный синтаксис применим и к ELSE и ELSEIF (expr) .Вот пример подобной структуры :
if ($a == 5):
    print "a equals 5";
    print "...";
elseif ($a == 6):
    print "a equals 6";
    print "!!!";
else:
    print "a is neither 5 nor 6";
endif;
      
WHILE

Цикл WHILE - простейший тип цикла в PHP3. Он действует как и его аналог в C. Основная форма оператора WHILE :

WHILE(expr) statement 

Смысл оператора WHILE прост. Он предписывает PHP выполнять вложенный(е) оператор(ы) до тех пор пока expr равно TRUE. Значение выражения проверяется каждый раз при начале цикла, так что если значение выражения изменится внутри цикла, то он не прервЈтся до конца текущей итерации (выполнение всего блока вложенных операторов - это одна итерация). Иногда, если значение expr равно FALSE с самого начала, цикл не выполняется ни разу.

Как и в IF, вы можете сгруппировать несколько операторов внутри фигурных скобок или использовать альтернативный синтаксис :

WHILE(expr): выражения ... ENDWHILE;

Следующие примеры идентичны - оба выводят номера с 1 по 10:
/* example 1 */

$i = 1;
while ($i <= 10) {
    print $i++;  }

/* example 2 */

$i = 1;
while ($i <= 10):
    print $i;
    $i++;
endwhile;
     
DO..WHILE

Цикл DO..WHILE очень похож на WHILE за исключением того, что значение логического выражения проверяется не до, а после окончания итерации. Основное отличие в том, что DO..WHILE гарантировано выполнится хотя бы один раз, что в случае WHILE не обязательно.

Для циклов DO..WHILE существует только один вид синтаксиса: 
$i = 0;
do {
    print $i;
} while ($i>0);
     

Этот цикл выполнится один раз, так как после окончания итерации будет проверено значение логического выражения, а оно равно FALSE ($i не больше 0), и выполнение цикла завершится.

Опытные программисты на C может быть знакомы с иным использованием DO..WHILE, позволяющем прекратить исполнение блока операторов в середине путЈм внедрения его в цикл DO..WHILE(0) и использования оператора BREAK. Следующий код демонстрирует такую возможность :
do {
    if ($i < 5) {
        print "i is not big enough";
        break;
    }
    $i *= $factor;
    if ($i < $minimum_limit) {
        break;
    }
    print "i is ok";
    ...process i...
} while(0);
     

Не беспокойтесь, если вы не совсем поняли это. Вы можете программировать весьма мощные скрипты и без этой возможности.
FOR

Циклы FOR - наиболее мощные циклы в PHP. Они работают подобно их аналогам в C. Синтаксис цикла FOR :

FOR (expr1; expr2; expr3) statement 

Первое выражение (expr1) безусловно вычисляется(выполняется) в начале цикла.

В начале каждой итерации вычисляется expr2. Если оно равно TRUE, то цикл продолжается и выполняются вложенный(е) оператор(ы). Если оно равно FALSE, то цикл заканчивается.

В конце каждой итерации вычисляется(исполняется) expr3.

Каждое из этих выражений может быть пустым. Если expr2 пусто, то цикл продолжается бесконечно (PHP по умолчанию считает его равным TRUE, как и С). Это не так бесполезно, как могло бы показаться, так как зачастую вам требуется закончить выполнение цикла используя оператор BREAK в сочетании с логическим условием вместо использования логического выражения в FOR.

Рассмотрим следующие примеры. Все они выводят номера с 1 по 10 : 
/* пример 1 */

for ($i = 1; $i <= 10; $i++) {
    print $i;
}

/* пример 2 */

for ($i = 1;;$i++) {
    if ($i > 10) {
        break;
    }
    print $i;
}

/* пример 3 */

$i = 1;
for (;;) {
    if ($i > 10) {
        break;
    }
    print $i;
    $i++;
}

/* пример 4 */

for ($i = 1; $i <= 10; print $i, $i++) ;
     

Конечно, первый вариант кажется лучшим (или четвЈртый), но оказывавется возможность использования пустых выражений в цикле FOR зачастую оказывается полезной.

PHP также поддерживает альтернативный синтаксис FOR :

FOR (expr1; expr2; expr3): выражение; ...; endfor; 

Другие языки используют оператор foreach для того, чтобы обрабатывает массивы или списки. PHP использует для этого оператор while и функции list() и each() . Для примера смотрите документацию по этим функциям.
BREAK

VREAK прерывает выполнение текущего цикла.
$i = 0;
while ($i < 10) {
    if ($arr[$i] == "stop") {
        break;
    }
    $i++;
}
     
CONTINUE

CONTINUE переходит на начало ближайшего цикла.
while (list($key,$value) = each($arr)) {
    if ($key % 2) { // skip even members
        continue;
    }
    do_something_odd ($value);
}
     
SWITCH

Оператор SWITCH похож на группу операторов IF с одинаковым выражением. Во многих случаях вам нужно сравнить переменную (или выражение) со многими различными значениями и выполнить различные фрагменты кода в зависимости от того, чему будет равно значение выражения. Это как раз то, для чего предназначается оператор SWITCH. 

Следующие 2 примера это 2 разлчиных пути для достижения одной вещи, но один использует серию операторов IF, а другой - оператор SWITCH. 
/* пример 1 */


if ($i == 0) {
    print "i equals 0";
}
if ($i == 1) {
    print "i equals 1";
}
if ($i == 2) {
    print "i equals 2";
}

/* пример 2 */

switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
}
     

Важно понять как работает оператор SWITCH чтобы избежать ошибок. SWITCH выполняет последовательно оператор за оператором. В начале код не исполняется. Только когда встречается оператор CASE с подходящим значением, PHP начинает выполнять программу. PHP продолжает выполнять операторы до конца блока SWITCH или пока не встретит оператор BREAK. Если вы не напишете BREAK в конце цикла операторов, то PHP продолжит выполнять операторы и следующего SWITCH'а. К примеру : 
/* пример 3 */

switch ($i) {
    case 0:
        print "i equals 0";
    case 1:
        print "i equals 1";
    case 2:
        print "i equals 2";
}
     

В этом случае, если $i равно 0, то PHP выполнит все операторы print! Если $i равно 1, то PHP выполнит последние два print. И только если $i равно 2, вы получите ожидаемый результат и выведено будет только 'i equals 2'. Так что важно не забывать ставить BREAK (разве что в некоторых случаях вы специально не захотите их ставить для достижения определЈнной цели). 

Специальный случай - это 'default case'. Этот оператор соответствует всем значениям, которые не удовлетворяют другим case'ам. К примеру :
/* example 4 */

switch ($i) {
    case 0:
        print "i equals 0";
        break;
    case 1:
        print "i equals 1";
        break;
    case 2:
        print "i equals 2";
        break;
    default:
        print "i is not equal to 0, 1 or 2";
}
     

Другой заслуживающий упоминания факт - это то, что выражения в CASE могут быть любого скалярного типа, то есть целые числа или числа с плавающей запятой, а так же строки. Массивы и объекты не будут ошибкой, но в данном случае они не имеют значимости.
REQUIRE

Оператор REQUIRE заменяет себя содержимым указанного файла, похоже на то,как в препроцессоре C работает #include.

Это означает, что вы не можете поместить require() внутрь цикла и ожидать, что он включит содержимое дугого файла несколько раз в процессе каждой итерации. Для это используйте INCLUDE.

require ('header.inc'); 
INCLUDE

Оператор INCLUDE вставляет и выполняет содержимое указанного файла.

Это случается каждый раз, когда встречается оператор INCLUDE, так что вы можете включить этот оператор внутрь цикла, чтобы включить несколько файлов : 
$files = array ('first.inc', 'second.inc', 'third.inc');
for ($i = 0; $i < count($files); $i++) {
    include($files[$i]);
}
     

include() отличается от require() тем, что оператор include выполняется каждый раз при его встрече, а require() заменяется на содержимое указанного файла безотносительно будет ли выполнено его содержимое или нет 

Так как include() это специальный оператор, требуется заключать его в фигурные скобки при использовании внутри условного оператора. 
/* Это неправильно и не будет работать, как хотелось бы. */

if ($condition)
    include($file);
else
    include($other);

/* А вот это - верно. */

if ($condition) {
    include($file);
} else {
    include($other);
}
     

Когда файл исполняется, парсер пребывает в "режиме HTML", то есть будет выводить содержимое файла, пока не встретит первый стартовый тег PHP (<?).

Также смотрите readfile(), virtual(). 
FUNCTION

Функция может быть объявлена следующим образом: 
function foo ($arg_1, $arg_2, ..., $arg_n) {
    echo "Example function.\n";
    return $retval;
}
     

Внутри функции может быть любой верный код PHP3, даже объявление другой функции или класса . 

Функции должны быть определены перед тем, как на них ссылаться.
Возвращение результатов

Результаты возвращаются через необязательный оператор return. Возвращаемый результат может быть любого типа, включая списки и объекты.
function my_sqrt ($num) {
    return $num * $num;
}
echo my_sqrt (4);   // outputs '16'.
      

Множественные результаты не могут быть возврашены в качестве результата, но вы можете реализовать это путЈм возврата списка :
function foo() {
   return array (0, 1, 2);
}
list ($zero, $one, $two) = foo();
      
Аргументы

Информация может быть передана функции через список аргументов, которые являются разделЈнным запятыми списком переменных и/или констант.

PHP3 поддерживает передачу аргументов по значению (по умолчанию), по ссылке, и значения по умолчанию. Списки аргументов переменной длины не поддерживаются, но того же можно достичь, передавая массивы.
function takes_array($input) {
    echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
      
Передача по ссылке

По умолчанию, аргменты функции передаются по значению. Если вы хотите в функции модифицировать аргументы, то можете передать их по ссылке.

Если вы хотите, чтобы аргумент всегда передавался по ссылке, то следует поставить амперсенд (&) перед именем аргумента в объявлении функции : 
function foo( &$bar ) {
    $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo ($str);
echo $str;    // выведет :  'This is a string, and something extra.'
       

Если вы хотите передать аргумент по ссылке в случае, когда по умолчанию такого не делается, то добавьте амперсенд перед именем аргумента в вызове функции : 
function foo ($bar) {
    $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo ($str);
echo $str;    // выведет 'This is a string, '
foo (&$str);
echo $str;    // выведет 'This is a string, and something extra.'
       
Значения по умолчанию

Функции могут определять значения по умолчанию для скалярных аргументов в стиле C++ как показано : 
function makecoffee ($type = "cappucino") {
    echo "Making a cup of $type.\n";
}
echo makecoffee ();
echo makecoffee ("espresso");
       

Этот пример выведет следующее :
Making a cup of cappucino.
Making a cup of espresso.
      

Значение по умолчанию должно быть константой, а не переменной или, к примеру, членом класса.

Учтите, что когда вы объявляете аргументы по умолчанию, они должны быть справа от всех "неумолчальных" аргументов, в противном случае это не будет работать, как задумано. К примеру : 
function makeyogurt ($type = "acidophilus", $flavour) {
    return "Making a bowl of $type $flavour.\n";
}

echo makeyogurt ("raspberry");   // не будет работать, как ожидалось       

Этот пример выведет следующее :
Warning: Missing argument 2 in call to makeyogurt() in 
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Making a bowl of raspberry .
      

А теперь сравните с этим :
function makeyogurt ($flavour, $type = "acidophilus") {
    return "Making a bowl of $type $flavour.\n";
}

echo makeyogurt ("raspberry");   // а вот это работает       

И выводит следующее :
Making a bowl of acidophilus raspberry.
     
OLD_FUNCTION

Оператор OLD_FUNCTION позволяет вам определяить функцию использую синтаксис PHP/FI2 (за исключением того, что вы должны заменить 'function' на 'old_function').

Это свойство только для совместимости и должно использоваться лишь конверторами PHP/FI2 -> PHP3.

Описанные таким образом функции не могут быть вызваны из служебного кода PHP. Это к тому же значит, что вы не можете использовать их в функциях типа usort(), array_walk() и register_shutdown_function(). Вы можете обойти это путЈм введения специальной функции в терминах PHP3, которая будет вызывать OLD_FUNCTION. 
CLASS 

Класс - это набор переменных и функций, работающих с этими переменными. Класс определяется следующим образом :
<?php
class Cart {
    var $items;  // Количество вещей в корзине покупателя
  
    // Добавить $num наименований типа $artnr в корзину

    function add_item ($artnr, $num) {
        $this->items[$artnr] += $num;
    }
  
    // Убрать $num наименований  $artnr из корзины

    function remove_item ($artnr, $num) {
        if ($this->items[$artnr] > $num) {
            $this->items[$artnr] -= $num;
            return true;
        } else {
            return false;
        }   
    }
}
?>
     

Это определения класса Cart, который состоит связного списка наименований товаров в корзине и двух функций для добавления и удаления вещей из корзины.

Классы это типы, то есть, заготовки для реальных переменных. Вы должны создавать переменные желаемого типа, используя оператор new :
$cart = new Cart;
$cart->add_item("10", 1);
    

Таким образом, мы создали объект $cart класса Cart. Функция add_item() этого объекта вызывается для добавления 1 товара номер 10 к корзине.

Классы могут быть расширениями других классов. Расширенный класс обладает всеми переменными и функциями базового класса и тем, что вы определите при расширении класса. Это делается используя ключевое слово extends : 
class Named_Cart extends Cart {
    var $owner;
 
    function set_owner ($name) {
        $this->owner = $name;
    }
}
    

Это определяет класс Named_Cart, который имеет все переменные и функции класса Cart плюс дополнительную переменную $owner и дополнительную функцию set_owner(). Вы можете создать поименованую корзину обычным образом и установить или получить владельца корзины. Также вы можете использовать и нормальные функции корзины в поименованой корзине : 
$ncart = new Named_Cart;    // Создать корзину
$ncart->set_owner ("kris"); // Указать владельца
print $ncart->owner;        // Распечатать имя владельца корзины
$ncart->add_item ("10", 1); // (унаследовано из обычной корзины)
    

Внутри функций класса переменная $this означает сам объект. Вы должны использовать $this->нечто для доступа к переменной или функции с именем 'нечто' внутри объекта. 

Конструкторы это функции в классе, которые автоматически вызываются, когда вы создаЈте новую переменную данного класса. Функция становится классом, когда она имеет такое же имя, как и сам класс. 
class Auto_Cart extends Cart {
    function Auto_Cart () {
        $this->add_item ("10", 1);
    }
}
    

Мы определили класс Auto_Cart который является тем же классом Cart плюс имеет конструктор, который инициализирует корзину при создании, наполняя еЈ одним товаром типа "10". Конструкторы также могут иметь аргументы, и эти аргументы могут быть необязательными, что делает конструктор более полезным : 
class Constructor_Cart {
    function Constructor_Cart ($item = "10", $num = 1) {
        $this->add_item ($item, $num);
    }
}

// Покупаем вся одно и то же :

$default_cart   = new Constructor_Cart;

// А тут что-то новое :

$different_cart = new Constructor_Cart ("20", 17);

0

7

Php3 сейчас неактуален...

0

8

observer,

А что по твоему сейчас актуально?

0

9

Asp.net, php5

0


Вы здесь » КомПик » Web програмирование » manual PHP3