РАБотяга.ru

Заработок в интернете, идеи стартапов
  • Услуги
  • Раскрутка сайта
  • О сайте
  • Контакты
  • Карта сайта
  • Реклама в интернете
Статья опубликована 15 апреля 2010 в категории: PHP

PHP Общие понятия

Введение

Здравствуйте! С сегодняшнего дня мы начинаем серию публикаций о программировании на PHP. В этой статье мы дадим краткую вводную и посвятим вас в планы на будущее. Поскольку в интернете уже существует достаточное количество сайтов о PHP, публикующих материалы, рассчитанные на новичков, мы приняли решение в основном ориентироваться на людей, уже несколько разбирающихся в PHP-программировании. Это необходимо для того, чтобы понимать примеры кода, которые будут приводиться в дальнейшем.
Тем не менее, несмотря на предполагаемую подготовленность читателя, в первой статье мы дадим краткий обзор по PHP вообще – что он из себя представляет, какие задачи с его помощью следует решать, некоторые особенности синтаксиса, и т.п.

Что такое PHP?

PHP (его полное название: PHP: Hypertext Preprocessor) – это язык, предназначенный для быстрого создания динамических web-страниц. Синтаксис языка похож на С, Java и Perl, однако имеет и свои, присущие только ему особенности. В официальной документации PHP определяется как server-side HTML-embedded scripting language (встраиваемый в HTML скриптовый язык с обработкой на сервере). Из этого определения можно выделить два основных момента:
1. Обработка кода PHP производится на сервере, а не в браузере клиента, как, например JavaScript.
2. Код PHP может быть встроен непосредственно в тело HTML страницы, что выгодно отличает его от Perl.

<html>

<head>

<title>Example</title>

</head>

<body>

<?php echo «Hi, I’m a PHP script!»; ?>

</body>

</html>

Из этого примера виден принцип встраивания кода PHP в HTML код страницы: все, что находится между начальным и конечным тегом PHP ( соответственно) считается PHP кодом и обрабатывается интерпретатором PHP.

Немного истории

Создателем PHP первоначально был Rasmus Lerdorf, но сейчас разработкой этого языка занимается довольно большое количество людей, поставивших своей задачей его дальнейшее расширение и развитие. За время своего существования (а первая версия PHP появилась в конце 1994 года) этот язык претерпел очень значительные изменения, коснувшиеся как внешней его структуры (синтаксиса, набора функций и т.п.), так и внутренней организации. Последний раз подобные глобальные изменения коснулись PHP с появлением 4-й версии этого языка, когда PHP был полностью переписан с использованием Zend scripting engine, разработанным компанией Zend technologies. Это позволило добавить в синтаксис языка ряд новых функций, а также сделать его существенно быстрее, чем предыдущие версии. Причиной, по которой удалось добиться таких результатов является то, что Zend scripting engine является наполовину компилятором, т.е. компилирует PHP код, а уж затем производит его выполнение, тогда как предыдущие версии PHP были по своей сути интерпретаторами. В наших публикациях мы в основном будем вести разговор именно о PHP версии 4. Кстати, на момент публикации этой статьи последняя официальная версия PHP имеет номер 4.0.6

Где взять PHP и информацию о нем?

Основной источник информации о PHP – это его официальный сайт: www.php.net. Только здесь можно всегда найти последние версии PHP, документацию для него на различных языках (к сожалению русского среди них нет), посмотреть список имеющихся на данный момент багов и т.п. Единственный недостаток этого замечательного ресурса является то, что он на английском языке. Но вам все равно придется иногда пользоваться им, даже если вы не знаете английского языка – хотя бы для того, чтобы скачать себе новую версию PHP.
Необходимо заметить, что PHP Manual, являющийся официальной документацией языка PHP – это именно тот документ, к которому следует обращаться при возникновении каких-либо вопросов. Очень хорошо, если вы будете иметь его у себя на локальном диске и скачивать новую версию документации вместе с каждой новой версией PHP. Только так можно чувствовать себя в всегда в курсе последних изменений в языке, которым вы пользуетесь.
Еще один замечательные ресурс, посвященный PHP- PHP Builder. Этот ресурс содержит просто море информации: статьи, форумы и т.п. Просто кладезь информации для любого, кто хочет узнать что-нибудь новое о PHP и… владеет английским языком :-) К сожалению русскоязычного ресурса подобного уровня пока нет (или мне не удалось его найти), поэтому приведу лишь пару ссылок на те ресурсы по PHP, которые содержат действительно полезную информацию:
Клуб разработчиков PHP – содержит множество полезной информации о PHP, новости, статьи, ссылки и т.п

Это то, что касается общей информации о PHP. В отсутствие дистрибутива PHP она не слишком полезна. Центром распространения дистрибутивов является официальный сайт. В разделе downloads вы всегда можете скачать последнюю официальную версию как в виде исходных текстов (а PHP распространяется именно в виде исходных текстов), что необходимо для пользователей Unix, так и в виде готового к использованию продукта для Windows. Там же можно скачать и несколько более ранних версий, хотя, как правило, это не нужно, т.к. официальные версии PHP (в отличие от версий для разработчиков) достаточно стабильны в работе. Кроме этого для пользователей Windows я хотел бы посоветовать еще один очень хороший ресурс, предоставляющий дистрибутивы PHP, собранные именно для этой операционной системы. Это www.php4win.de.Отличие этих дистрибутивов как правило в том, что они более полные, т.е. содержат большее количество расширений PHP в готовом для использования виде, т.к. дистрибутивы с официального сайта как правило содержат лишь основной набор расширений.

Кроме того не следует забывать, что работа над PHP продолжается постоянно, появляются новые возможности, функции, модули и т.п. А официальные версии языка между тем выходят лишь раз в несколько месяцев. Что делать, если очень хочется «пощупать» новую версию PHP еще до выхода официального релиза? Ответ один – скачать т.н. «девелоперскую» версию PHP. Эти версии собираются автоматически каждый день из самых последних версий исходных текстов PHP. Однако нельзя забывать, что для этих версий (в отличие от официального релиза) никто не может гарантировать вам даже то, что скачанный вами дистрибутив хотя бы будет запускаться, не говоря уже о том, чтобы нормально работать. Эти версии предназначены в первую очередь для разработчиков языка и бета-тестеров. Но если вам все равно интересно попробовать, то загляните сюда: snaps.php.net

Синтаксис PHP

Как уже было сказано ранее – синтаксис PHP вомногом заимствован из таких языков какC, Java и Perl. Поэтому, если вы знакомы хотя бы с одним из них – вам не составит особого труда просто сесть и начать писать программы на PHP. Здесь мы не будем подробно останавливаться на описании синтаксиса – он хорошо описан в PHP Manual.Однако мне хотелось бы остановиться на некоторых аспектах, которые отличают PHP от других языков.

Имена переменных

Любая переменная вPHP имеет имя, начинающееся со знака $, например $variable.

Людям, привыкших к C/C++-подобным языкам этот принцип именования переменных может показаться странным, но на самом деле такой подход имеет определенные преимущества.

  1. При таком способе формирования имен переменных их очень легко отличить от остального кода. Если в других языках иногда может возникать путаница с тем, что при первом взгляде на код не всегда ясно – где здесь переменные, а где функции, то в PHP этот вопрос даже не встает.
  2. Данный принцип позволяет очень просто и элегантно реализовать функциональность, просто недоступную иначе. Например, ссылка на переменную по ее имени, хранящемуся в другой переменной:

$name = ‘value’;

$value = 5;

echo $$name;

В данном примере PHP выведет результат 5. Такие фокусы стали возможны из-за заложенного в PHP принципа: » anything is an expression» (любая вещь является выражением). Исходя из этого PHP воспринимает выражение $$name следующим образом:

  • парсер встречает символ $, а это значит, что следующее выражение является именем переменной
  • парсер встречает еще один символ $, и продолжает поиски имени уже другой переменной, значение которой необходимо для вычисления значения предыдущего выражения.
  • парсер получает имя name, находит переменную с таким именем, берет ее значение (‘value’) и возвращается назад.
  • поскольку на предыдущем шаге мы искали имя переменной, то значение только что вычисленного выражения воспринимается именно как имя переменной. Парсер ищет переменную с таким именем (value) и возвращает ее результат (5).

Как видите, это очень гибкая система и при небольшой тренировке вы сможете просто творить чудеса с ее помощью! Ведь точно так же можно оперировать с любыми элементами языка, имеющими имя, т.е. например вызывать метод класса по его имени, содержащемуся в переменной (о классах в PHP мы поговорим в одной из следующих публикаций).

Строки

Возможность однозначно идентифицировать переменную позволила создателям PHP дать возможность программистам использовать переменные непосредственно внутри строк! Пример подобного использования:

$name = ‘John’;

$age = 23;

echo «$name is $age years old»;

В качестве результата мы получим строку: John is 23 years old. Не правда ли, это исключительно удобно? Однако необходимо обратить ваше внимание на одну деталь – в PHP, в отличие от многих других языков, различаются строки, заключенные в одинарные и двойные кавычки. И подобное замещение имен переменных их значениями производится только в строках, заключенных в двойные кавычки! Очень важно всегда помнить об этом, дабы избежать ошибок.

Строки, заключенные в двойные кавычки могут содержать и более сложные выражения. Для этого необходимо заключить их в фигурные скобки:

$man = array(‘John’,23);

echo «{$man[0]} is {$man[1]} years old»;

Результат будет таким же, как и в предыдущем примере.

Еще одной интересной особенностью работы PHP со строками является поддержка т.н. here docs. Ниже приведенпример:

$str = <<<TEXT

There can be any text

which will be stored

into a string

right in the same way

as it

typed here

TEXT;

В этом случае значением переменной будет весь текст, содержащийся между начальным и конечным маркерами (в данном случае это строка TEXT, но этот маркер может быть любой последовательностью символов). Признаком того, что это here doc, является наличие <<< непосредственно после знака присваивания. Данный механизм очень удобен в случае, если строке необходимо присвоить какой-то сложный текст, особенно, если необходимо сохранить его форматирование. Кстати, в случае использования here docs вы также имеете возможность использования переменных внутри строки как это было описано ранее.

Массивы

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

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

$data = array(1,10,100,1000, // Численные данные

‘Some text’,'Another text’, // Строковые данные

‘name’=>’John’,'age’=>23, // Ассоциативные связи в массиве

‘date’=>array(‘day’=>10,’month’=>’may’,'year’=>2001)); //Вложенный массив

Как видите – различные данные могут быть совмещены вместе в единой структуре без каких-либо проблем! Посмотрим, как можно обратиться к этим данным:

echo $data[1]; // Результат – 10

echo $data[5]; //Результат – ‘Another text’

echo $data['age']; // Результат – 23

echo $data['date']['month']; //Результат-’may’

Большое количество информации и примеров, а также описания функций для обработки массивов можно найти в

Variable scope

Английский термин, вынесенный в заголовок переводится на русский как «область видимости переменной», но в оригинале этот термин намного понятнее :-)

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

В PHP на этот счет есть свои особенности. Самая «странная» вещь, с которой сталкивается человек при знакомстве с PHP это то, что переменная, описанная вне функции невидима внутри нее! В других языках программирования мы привыкли к тому, что глобальные переменные программы видны везде, но в PHP это не так. Но посмотрев на эту «странность» повнимательнее можно заметить, что она имеет больше выгоды, нежели неудобств, т.к. является своего рода «защитным механизмом», который не позволит вам случайно перепутать локальную и глобальную переменную, что подчас приводит к очень тяжелым последствиям.

Как же получить доступ к глобальным переменным из функции? Есть 2 способа сделать это:

  1. Использовать глобальный ассоциативный массив $GLOBALS. Это единственная переменная в PHP, которая видна отовсюду и которая «содержит» в себе все глобальные переменные, имеющиеся в программе. Т.о. если вы внутри функции обращаетесь к переменной $variable – то вы обращаетесь к локальной переменной, а если $GLOBALS['variable'] – то к глобальной.

function myFunction() {

$variable = 5; // Присваиваем значение локальной переменной

$GLOBALS['variable'] = 10; // Присваиваем значение глобальной переменной

};

  1. Использовать ключевое слово global. Оно позволит вам задать список глобальных переменных, которые будут видимы внутри функции:

function myFunction() {

global $variable;

$variable = 10; // Присваиваем значение глобальной переменной

};

Что дальше?

На этом мы пока остановимся. Синтаксис PHP содержит множество интересных решений, здесь мы рассмотрели лишь некоторые из них. Возможно мы посвятим еще один выпуск рассказу о синтаксисе этого языка, а затем перейдем к более сложным и интересным вещам. Итак, что вас ожидает в дальнейшем?

  • Работа с массивами
  • Работа с объектами
  • Работа с ссылками
  • Работа с сессиями
  • Обработка данных форм, upload файлов и т.п.
  • Regular expressions
  • Работа с базами данных
  • Работа с XML/XSLT
  • Что-то еще? Спрашивайте!

Конечно, материал не обязательно будет идти именно в такой последовательности, здесь многое зависит от вас и от вашей реакции на наши статьи. Если вы хотите узнать что-то, если у вас есть вопрос или проблема и вы не знаете ответа на них – пишите, спрашивайте, мы Вам обязательно ответим.

Функции в PHP

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

function mySum($a,$b)

{

$result = $a+$b;

return($result);

};

Использование этой функции:

$result = mySum(2,3);

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

Любая функция в PHP состоит из 4 основных частей:

  • Имени функции. Каждая функция должна иметь свое уникальное имя, в противном случае PHP выдаст ошибку о попытке переопределения функции.
  • Списка аргуметов. Этот список может быть пустым (если функция не должна получать агрументов из внешней программы). Каждый аргумент должен иметь уникальное имя, под которым он будет «известен» внутри функции. В приведенном выше примере функция имеет два аргумента с именами $a и $b.
  • Непосредственно кода функции. Функция можеи содержать внутри себя практически любой код, допустимый в PHP за исключением определения других функций и объектов (это, кстати, отличает PHP например от JavaScript, где вложенное определение функций допустимо). В нашем случае код функции занимается вычислением значения двух переданных аргументов.
  • Возвращаемого значения. Функция не обязана возвращать значение, но если сделать это необходимо, то это делается с помощью оператора return().

Для иллюстрации дальнейшего материала предлагаю использовать следующую задачу:

Есть глобальный массив $data, содержащий в себе некоторые данные. Необходимо написать функцию, которая бы при каждом вызове возвращала следующее значение из этого массива или null, если в массиве не осталось значений.

При решении этой задачи мы сталкиваемся с небольшой проблемой: нам необходимо каждый раз возвращать из функции 2 значения (очередное значение из массива и текущее значение указателя в массиве). Однако необходимо заметить, что функция может вернуть только одно значение. Ниже мы рассмотрим разные варианты обхода этой проблемы.

  1. Возврат нескольких значений в виде массива.

// Функция достает следующее значение из глобального массива $data и возвращает его

// Возвращает null, если в массиве не осталось ни одного значения.

function getNext($counter)

{

global $data;

if (isset($data[$counter]))

{

$result = array();

$result['data'] = $data[$counter];

$counter = $counter+1;

$result['counter'] = $counter;

return($result);

}

else

return(null);

};

// Использование этой функции

$counter = 0; // Эта переменная будет использоваться в качестве «указателя»

// на текущий элемент в массиве.

while($next = getNext($counter)) // Получаем следующее значение

{

$value = $next['data']; // Значение из массива

$counter = $next['counter']; // Новое значение указателя

// Здесь мы каким-то образом используем полученные данные

};

Кстати, не могу удержаться, чтобы не продемонстрировать, как можно записать то же самое по-другому:

function getNext($counter)

{

return((isset($GLOBALS['data'][$counter]))?

array(‘data’=>$GLOBALS['data'][$counter++],’counter’=>$counter):

null);

};

Как видите – намного компактнее, хотя с первого взгляда и менее понятно.

  1. Использование глобальных переменных.

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

function getNext()

{

global $data, $counter;

if (isset($data[$counter]))

return($data[$counter++]);

else

return(null);

};

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

  1. Использование ссылок.

В PHP4 появилась возможность работать со ссылками (references). Это очень мощный механизм, о котором мы поговорим подробнее немного позже. Если вы знакомы с C/C++, то для вас references не будут чем-то новым – это аналог указателей в C. Если же нет, то вкратце объясню, что references позволяют нескольким разным переменным ссылаться на одно и то же значение. Может быть кому-то проще будет представить это как одну переменную с несколькими именами. Признаком использования references является наличие знака & перед именем переменной. А теперь посмотрим, как решить нашу задачу с использованием references.

function getNext(&$counter)

{

global $data;

if (isset($data[$counter]))

return($data[$counter++]);

else

return(null);

};

Как видите, здесь мы снова обошлись возвратом единственного значения, избежав при этом использования обращений к счетчику как глобальной переменной. Это стало возможным благодаря тому, что счетчик передается в функцию не «по значению», а «по ссылке». Т.о. меняя значение аргумента мы фактически меняем значение переменной, на которую ссылается этот аргумент, т.е. в нашем случае – глобальную переменную счетчика.

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

  1. Использование статических переменных.

В PHP возможно создание статических переменных внутри функции. Эти переменные отличаются от обычных тем, что, будучи локальными переменными внутри функции, они между тем сохраняют свое значение между вызовами функций. Посмотрим, как выглядит решение нашей задачи с использованием статической переменной в качестве счетчика:

function getNext()

{

global $data;

static $counter=0;

if (isset($data[$counter]))

return($data[$counter++]);

else

return(null);

};

// Использование этой функции

while($value = getNext())

{

// Здесь мы каким-то образом используем полученные данные

};

Как видите, в нашем случае использование статической переменной здорово упростило код.

Ну и еще пара вариантов решения нашей задачи:

Вариант 1:

foreach($data as $value)

{

// Здесь мы каким-то образом используем полученные данные

};

Вариант 2:

reset($data);

while(list($key,$value) = each($data))

{

// Здесь мы каким-то образом используем полученные данные

};

Эти варианты решения не относятся непосредственно к рассматриваемому вопросу, они лишь призваны проиллюстрировать тот факт, что в PHP зачастую можно решить задачу, используя встроенные средства языка, причем решение, зачастую будет более простым и элегантным.

Еще одним важным свойством функций в PHP является поддержка функций с переменым числом аргументов, а также задание значений по умолчанию для аргументов функций. Рассмотрим, как это выглядит на примере:

// Вывод текста с заданным цветом. Цвет по-умолчанию – красный.

function printColoredString($text,$color=»#FF0000″)

{

echo «<font color=’$color’>$text</font>»;

};

// Использование этой функции

printColoredString(‘Немного текста’); // Текст красного цвета

printColoredString(‘Еще немного текста’,'#0000FF’); // Текст синего цвета

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

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

function getAvg()

{

$args = func_get_args();

return(array_sum($args)/func_num_args());

};

И, наконец, необходимо рассказать еще об одной интересной возможности PHP по работе с функциями. Это т.н. анонимные функции (anonymous functions). Их отличие от обычных функций состоит в том, что они не описываются заранее, а создаются непосредственно во время выполнения PHP скрипта. Подобные функции часто используются, если необходимо использовать какую-нибудь простую функцию, например в качестве callback при сортировке массива. Лучше всего использование такой функции показать на примере. Пусть массив $users содержит информацию о пользователях сайта, и имеет следующую структуру:

array(

‘firstName’ => <имя пользователя>,

‘lastName’ => <фамилия>,

‘age’ => <возраст>

);

Теперь предположим, что нам необходимо отсортировать этот массив пользователей по их возрасту. Разумеется здесь есть несколько вариантов решения этой задачи, но нас сейчас интересует вариант с использованием анонимной функции:

$callback = create_function(‘$u1,$u2′,’return(($u1["age"]==$u2["age"])?0:(($u1["age"]>$u2["age"])?1:-1));’);

usort($users,$callback);

Как видите, после создания функция присваивается обычной переменной. А это значит, что с ней можно сделать практически все то, что можно сделать и с обычной переменной. Например запихать ее в массив :-) и таким образом создать массив функций, которые можно использовать по мере надобности. Кстати, PHP поддерживает и вот такой способ вызова функций:

function myFunction()

{

echo «This is my function»;

};

$funcName = ‘myFunction’;

$funcName(); // Вызов функции myFunction()

И напоследок хотелось бы заметить еще одну интересную особенность PHP: хотя сам по себе язык является регистрозависимым (т.е. например переменные $var и $Var – это разные переменные), имена функций в нем не являются регистрозависимыми (т.е. функции myFunction, myfunction, MYFUNCTION и mYfUnCtIOn – это одна и та же функция :-) ). Почему это так – покрыто мраком тайны, но об этом нужно помнить, особенно когда читаешь чужой код.

Объекты в PHP

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

Объекты в PHP описываются следующим образом:

class className // Определение объекта className

{

var $property; // Определение переменной объекта

function className() // Функция, описанная внутри объекта и имеющая то же имя, что и имя

{ // объекта, является конструктором этого объекта (по аналогии с C++)

$this->property = 0; // Переменная $this внутри методов объекта ссылается на сам объект

};

function setProperty($property) // Определение метода объекта

{

$this->property = $property; // Обратите внимание, property в

// левой части выражения – это

// переменная объекта (доступ через

// $this), а в правой части – аргумент

// функции с тем же именем, что

// и переменная объекта.

};

};

Как и функции, объекты должны иметь уникальное имя. Однако в отличие от функций объявление объекта еще не дает возможности работать с ним. Для того, чтобы работать с объектом, необходимо создать экземпляр этого объекта (instance). Это делается также, как и во многих других языках:

// Описание объекта Man

class Man

{

var $firstName;

var $lastName;

var $age;

function Man($fName,$lName,$age)

{

$this->firstName = $fName;

$this->lastName = $lName;

$this->age = $age;

};

function getName()

{

return($this->firstName.» «.$this->lastName);

};

function setAge($newAge)

{

$this->age = $newAge;

};

};

// Создание экземпляра объекта

$john = new Man(‘John’,'Smith’,23); // Здесь мы передаем параметры непосредственно

// в конструктор объекта

Теперь переменная $john содержит экземпляр объекта Man. К слову сказать, хотя в PHP можно задавать конструкторы объектов, поддержки деструкторов для объектов до сих пор нет. Неясно, чем вызвано подобное ограничение, но это факт.

После того, как переменной присвоен созданный экземпляр объекта – с этой переменной можно делать все , что можно делать с этим объектом:

echo «Hello, my name is «.$john->getName();

echo «I’m «.$john->age.» years old»;

Кстати, я думаю, вы уже заметили, что имена переменных, являющихся переменными объектов, записываются без символа $ перед ними? Это происходит потому, что PHP рассматривает связку «(переменная-объект)->(переменная объекта)» как одну переменную. Зато это позволит вам очень элегантно делать например вот такие вещи:

$methodName = ‘getName’;

echo «My name is «.$john->$methodName;

Здорово, не правда ли? :-)

Но объекты как таковые не были бы так интересны, если бы существовали сами по себе. Однако это не так и самым интересным, нужным и полезным свойством объектов является их наследование. Посмотрим, как это выглядит на примере уже описанного выше объекта Man:

// Описание объекта Worker, наследованного от объекта Man

class Worker extends Man

{

var $profession;

var $salary = 500; // Заметьте, переменные объектов могут быть

// инициализированы каким-то значением

// уже на этапе их описания. Однако это

// значение может быть только константой

// (не переменной!)

function Worker($fName,$lName,$age,$profession=’engineer’,$salary=500)

{

// PHP не вызывает конструктор родительского объекта автоматически,

// поэтому вам необходимо делать это самим

$this->Man($fName,$lName,$age);

$this->profession = $profession;

$this->salary = $salary;

};

};

// Создаем экземпляр объекта Worker

$worker = new Worker(‘Jack’,'Robertson’,29,’programmer’);

// Только что созданный экземпляр объекта Worker унаследовал все переменные и методы объекта Man

echo «Hello, I’m «.$worker->getName();

Переменные и методы можно не только добавлять, но и переопределять методы родительского объекта:

// Создадим новый вариант объекта Worker, переопределив метод getName()

class Worker extends Man

{

var $profession;

var $salary;

function getName()

{

return(parent::getName().», «.$this->profession);

};

};

// Создаем экземпляр объекта Worker и попытаемся получить его имя:

$worker = new Worker(‘Jack’,'Robertson’,29,’programmer’);

echo $worker->getName();

Результатом работы предыдущего примерв будет строка: «Jack Robertson, programmer». Вы заметили использование нового оператора :: ? Этот оператор позволяет вызывать из метода объекта метод одного из родительских объектов, даже если тот уже переопределен при более «поздних» наследованиях. Использование ключевого слова parent в этом выражении позволяет вызвать метод непосредственного предка этого объекта. Однако в более сложных случаях, когда степень наследования объектов выше – можно использовать непосредственно имя объекта, метод которого необходимо вызвать. В нашем случае можно было бы написать: Man::getName().

Программирование на PHP. Третий выпуск. Более подробно о references.

В предыдущем выпуске я вкратце упомянул о references и обещал, что мы поговорим о них подробнее в одном из следующих выпусков. Сегодняшний выпуск мы посвятим именно рассмотрению этого вопроса, т.к. references играют важную роль в PHP4 и используются очень часто при решении различных задач позволяя сделать это решение более легким, гибким и элегантным.

References в PHP

References появились в PHP начиная с четвертой версии, вследствие того, что теперь в качестве ядра PHP используется Zend scripting engine. Для того, чтобы вам стала понятна суть references – необходимо объяснить как Zend engine работает с переменными.

Внутри кода Zend engine существует разделение между именем переменной и ее значением. Это можно представить как две различные таблицы:

Другие статьи в этой категории:

  • Свежие записи

    • Статейное продвижение
    • LG Electronics, новости
    • Заработок на кликах: суть работы
    • Выбор брокера Форекс, предварительный этап
    • Каков же популярный МегаФон V9+? Как быстро и много заработать
    • Планшет для школьных уроков
    • Общение является важной
    • Станьте фрилансером
    • Доски объявлений
    • Отличное устройство
  • Рубрики

    • IT-устройства
    • PHP
    • SEO
    • Бизнес
    • Вебмастеринг
    • Заработок в интернете
    • Интернет
    • Инфо-бизнес
    • Новости
    • Поисковые системы
    • Психология бизнеса
    • Разное
    • Раскрутка сайта
    • Реклама
    • Юзабилити
  • Интересные проекты

    Сегодня вред курения приносит колоссальные проблемы человечеству. Вы можете сами узнать все необходимые подробности с нашего проекта.
  • Метки

    google Internet Explorer SEO Раскрутка сайта вера в себя заработок заработок в интернете идеи стартапов интернет инфо-бизнес компании компьютеры копирайтинг мотивация новости ноутбук ноутбуки общение в интернете ограничивающие убеждения онлайн бизнес оптимизация партнёрские программы поиск поисковая система поисковые системы портал порталы программы продвижение проект проекты работа раскрутка реклама русский миллион сайт сайты сеть создание сайта социальные сети ссылки статьи устройства электронная коммерция яндекс
  • Архивы

    • Май 2012
    • Апрель 2012
    • Март 2012
    • Февраль 2012
    • Январь 2012
    • Декабрь 2011
    • Ноябрь 2011
    • Октябрь 2011
    • Сентябрь 2011
    • Август 2011
    • Июль 2011
    • Июнь 2011
    • Май 2011
    • Апрель 2011
    • Март 2011
    • Февраль 2011
    • Январь 2011
    • Декабрь 2010
    • Ноябрь 2010
    • Октябрь 2010
    • Сентябрь 2010
    • Август 2010
    • Июль 2010
    • Июнь 2010
    • Май 2010
    • Апрель 2010
    • Март 2010
    • Февраль 2010
    • Январь 2010
    • Декабрь 2009
    • Ноябрь 2009
РАБотяга.ru - Заработок в интернете, идеи стартапов © 2009 - 2012.
Разработка блога: web2.0studio.