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


В PHP имя переменной всегда начинается со знака доллара ($), за которым обязательно должна следовать буква, после которой можно использовать буквы, цифры и знак подчёркивания. Имена чувствительны к регистру символов, т.е. переменные $value, $Value, $VALUE и $VaLuE - четыре РАЗНЫХ переменных, хотя их имя и читается одинаково.

Примеры синтаксически правильных имён переменных:

Пример некорректных имён:

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

Пример плохо читаемого кода

Краткость, конечно, сетстра таланта, но жертвовать простотой восприятия кода ради его компактности - неразумно. Тем более, что длина имени никак не влияет на производительнось скрипта. Но не стоит и впадать в противоположную крайность - давать переменным слишком длинные имена. Если имя должно состоять из двух и более слов - части имени нужно выделять заглавными буквами или разделять подчёркиваниями. Например, имя $strusernameadndomain намного лучше воспринимается в виде $str_UserNameAndDomain .

Пример хорошо читаемого кода

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

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

Рассмотрим пример:

Передача переменных по значению

Для работы с переменными есть в PHP особые функции:

  • isset() - проверяет, была ли объявлена переменная и отличается ли её значение от NULL;
  • empty() - аналог isset()
  • unset() - встроенная функция языка, удаляющая значение переменной и удаляющая саму переменную из списка доступных переменных (уничтожающая переменную).

Область видимости переменных

Очень важная характеристика переменной - её область видимости (область действия), т.е. описание того, из каких мест программы (скрипта) можно прочитать или изменить её значение. Следует всегда помнить, что переменная, объявленная внутри блока программы, видна только в пределах этого блока, а для того, чтобы обратиться к переменной, объявленной снаружи блока, необходимо её особым образом объявить.

Блоками программы в данном случае являются "скрипт", "функция" или "класс". Например:

Вроде бы всё правильно, но - не работает. Почему? Потому что если явно не сказать, что переменная $name внутри функции - это в действительности глобальная переменная $name, то интерпретатор создать временную копию переменной с именем $name и пустым значением. А так как значение пустое (неопределённое), то и результат сложения строк будет неопределён (пуст).

Исправить положение очень легко, достаточно добавить всего одну строку (выделена жирным шрифтом):

global $name; // явно указываем, что надо // использовать глобальную переменную. $fullName = $name . $family; echo "Имя внутри функции: ".$fullName; } echo "Имя ДО вызова функции: ".$name; // результат: "Имя ДО вызова функции: Вася" tryChengeName(" Иванов"); // результат: "Имя внутри функции: Вася Иванов" echo "Имя ПОСЛЕ вызова функции: ".$name; // результат: "Имя ПОСЛЕ вызова функции: Вася Иванов" ?>

В данном примере переменная $name имеет область видимости, равную всему скрипту, а переменная $fullName, объявленная внутри функции, имеет область определения равную этой самой функции. Это значит, при выходе их функции переменная $fullName будет уничтожена, а все попытки прочитать её значение приведут к ошибке.

Примеры работы с классами мы рассмотрим в разделе "Классы и наследование".

Переменные переменные

Да-да, здесь нет ошибки, именно так (двумя словами) называются некоторые переменные в PHP. Смысл в том, что текстовая часть имени переменной (т.е. имя без знака доллара) может сама быть именем. Например:

Настоятельно не рекомендуется пользоваться подобными приёмами без острой необходимости. Код, напичканый такими трюками, очень сложно сопровождать. Особенно это важно при работе с данными, вводимыми пользователями. Главная причина сложностей - неявные зависимости. Например, что случится, если вместо имени "Вася" написать что-то вроде """""_;%//^q"" ? Правильно! Скрипт в большинстве случаев не сможет выполниться! Можно, конечно, добавить кучу проверок на наличие "неправильных" символов, но проще вообще не пользоваться такими трюками.

Константы

Константа - это некая неизменная величина. Константа объявляется одновременно с именем и значением. Для объявления константы служит функция define() , а для определения наличия константы (т.е. была она определена или нет) - функция defined() . Имя константы строится по тем же правилам, что и имена переменных.

Примеры констант:

Отдельный вид констант PHP - так называемые "магические константы". Это системные константы, значение которых определяет и устанавливает интерпретатор. Таких констант немного:

  • __LINE__ Содержит номер текущей строки в текущем файле.
  • __FILE__ Содержит полное имя текущего файла
  • __FUNCTION__ Содержит имя текущей функции.
  • __CLASS__ Содержит имя текущего класса.
  • __METHOD__ Содержит имя текущего метода текущего класса.

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

Переменную можно представить в виде яшика, внутри которого находится значение

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

Имена всех переменных в РНР начинаются со значка $ (знак доллара)

Например, $testVariable = 3; (следующее выражение создает переменную с именем $testVariable (и присваивает ей значение 3.

$testVariable = 3;

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

$testVariable = "Три";

Знак равенства, который мы использовали в двух последних выражениях, называется оператором присваивания. С его помощью переменным присваиваются значения. Для выполнения различных математических операций используются другие операторы.
$testVariable =1+1; // присваивает значение 2
$testVariable =1-1; // присваивает значение 0
$testVariable = 2*2; //присваивает значение 4
StestVariable =2/2; // присваивает значение 1
Глядя на этот пример, вы уже, вероятно, догадались, что + - оператор сложения, --оператор вычитания, * - оператор умножения, а / - оператор деления. Все они - арифметические операторы, выполняют действия с числами. Переменные можно использовать везде, где применяются конкретные символьные значения. Взгляните на следующий набор выражений.
$var1 = "РНР"; // присваивает значение "РНР" переменной $varl
$var2 = 5; // присваивает значение 5 переменной $var2
$var3 = $var2 + 1; //~присваивает значение 6 переменной $var3
$var2 = $varl; // присваивает значение "РНР" переменной $var2
echo $var1; // выволит "РНР"
echo $var2; // выводит "5"
echo $var3; // выводит "6"
echo $var1 . " - наше все!"; // выводит "РНР - наше все!"
echo "$var1 - наше все!"; // выводит "РНР - наше все!"
echo "$var1 - наше все!"; // выводит "$varl - наше все!"
Обратите внимание на две последние строки. Вы можете добавить имя переменной внутрь текста и получить ее значение в том же месте, если заключите строку в двойные кавычки вместо одинарных. Процесс преобразования имен переменных в их значения называется интерполяцией. Как видно на примере последней строки, текст, заключенный в одинарные кавычки, не интерполирует имена переменных в их содержимое.

Переменные в РНР - особые объекты, которые могут содержать в буквальном смысле все, что угодно. Если в программе что-то хранится, то оно всегда хранится в переменной (исключение - константа, которая, впрочем, может содержать только число или строку). При присваивании переменная в большинстве случаев копируется один-в-один, какую бы сложную структуру она ни имела. Единственное исключение из этого правила - копирование переменной, ссылающейся на объект: в этом случае объект остается в единственном экземпляре, копируется лишь ссылка на него...

Как уже говорилось, в РНР не нужно ни описывать переменные явно, ни указывать их тип. Интерпретатор все это делает сам. Однако иногда он может ошибаться (например, если в текстовой строке на самом деле задано десятичное число), поэтому изредка появляется необходимость явно указывать, какой же тип имеет то или иное выражение.

Типы переменных, которые поддерживает РНР:

integer (целое число)

Целое число со знаком, обычно длиной 32 бита (от -2 147 483 648 до 2 147 483 647, если это еще кому-то может быть интересно). double (вещественное число) Вещественное число довольно большой точности (ее должно хватить для подавляющего большинства математических вычислений).

string (строка текста)

Строка любой длины. В отличие от С, строки могут содержать в себе также и нулевые символы, что никак не повлияет на программу. Иными словами, строки можно использовать для хранения бинарных данных. Длина строки ограничена только размером свободой памяти, так что вполне реально прочитать в одну строку целый "объемистый" файл размером так килобайтов 200-300 (что часто и делается). Строка легко может быть обработана при помощи стандартных функций, допустимо также непосредственное обращение к любому ее символу.

array (ассоциативный массив)

Ассоциативный массив (или, как его часто называют программисты на Perl, хэш, хотя для РНР такое понятие совсем не подходит). Это набор из нескольких элементов, каждый из которых представляет собой пару вида ключ=> значение (символом => мы обозначаем соответствие определенному ключу какого-то значения). Доступ к отдельным элементам осуществляется указанием их ключа. Ключами здесь могут служить не только целые числа, но и любые строки.

Ссылка на объект, который реализует несколько принципов объектно-ориентированного программирования. Внутренняя структура объекта похожа на ассоциативный массив, за исключением того, что для доступа к отдельным элементам (свойствам) и функциям (методам) объекта используется оператор ->, а не квадратные скобки. Переменные в РНР версии 5 (в отличие от версии 4) хранят не сами объекты, а лишь ссылки на них. Это означает, что при копировании таких переменных (например, оператором $а = $obj) данные объекта в памяти не дублируются, и последующее изменение объекта $а повлечет за собой немедленное изменение объекта $obj.

resource (ресурс)

Некоторый ресурс, который РНР обрабатывает особым образом. Пример ресурса - переменная, содержащая дескриптор открытого файла. Такая переменная может в дальнейшем быть использована для того, чтобы указать РНР, с каким файлом нужно провести ту или иную операцию (например, прочитать строку). Другой пример: функция imageCreate () графической библиотеки GD создает в памяти новую "пустую" картинку указанного размера и возвращает ее идентификатор. Используя этот идентификатор, вы можете манипулировать картинкой (например, нарисовать в ней линию или вывести текст), а затем - сохранить результат в PNG- или JPEG-файл.

boolean (логический тип)

Существует и еще один "гипотетический" тип переменных - логический. Логическая переменная может содержать одно из двух значений: false (ложь) или true (истина). Вообще, любое ненулевое число (и непустая строка), а также ключевое слово true символизирует истину, тогда как 0, пустая строка и слово false - ложь. Таким образом, любое ненулевое выражение (в частности, значение переменной) рассматривается в логическом контексте как истина. Вы можете пользоваться константами false и true в зависимости от логики программы. При выполнении арифметических операций над логической переменной она превращается в обычную, числовую переменную. А именно, false рассматривается как О, a true - как 1.

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

Действия с переменными

Вне зависимости от типа переменной, над ней можно выполнять три основных действия.

Присвоение значения Мы можем присвоить некоторой переменной значение другой переменной (или значение, возвращенное функцией), ссылку на другую переменную, либо же константное выражение (за исключением объектов, для которых вместо этого используется оператор new). Как уже говорилось, за преобразование типов отвечает сам интерпретатор. Кроме того, при присваивании старое содержимое и, что самое важное, тип переменной теряются, и она становится абсолютно точной копией своего "родителя". То есть, если мы массиву присвоим число, это сработает, однако весь массив при этом будет утерян.

Проверка существования Можно проверить, существует ли (т. е. инициализирована ли) указанная переменная. Осуществляется это при помощи встроенного в РНР оператора isset. Например:
if (isset(SmyVar))
echo "Такая переменная есть. Ее значение SmyVar";

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

Уничтожение

Уничтожение переменной реализуется оператором unset. После этого действия переменная удаляется из внутренних таблиц интерпретатора, т. е. программа начинает выполняться так, как будто переменная еще не была инициализирована. Например:

Переменная - это символическое обозначение области памяти, которое программист может использовать для присвоения произвольного значения. Изменять значение переменной можно в ходе выполнения программы. О непосредственном управлении данной областью памяти позаботится сам компьютер, нам необходимо лишь определить для переменной имя и присвоить ей значение. Необходимо помнить о том, что при использовании переменной перед ее именем нужно всегда ставить знак доллара ($) - именно так вы сообщаете РНР, что в данном случае используется переменная.

Правильные названия переменных:

$result,
$Result или
$reSULt.
Ошибки при вводе с клавиатуры названий переменных - вот одна из наиболее распространенных ошибок в РНР-скриптах.

Неправильные названия переменных, например:

$12_hoi.rs_AM (цифры в начале имени переменной),
$High Noon (наличие пробела)
$High-Noon (использование знака минус - это в РНР также специальный символ).

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

Оператор присваивания

Мы не сильно ошибемся, если скажем, что нет на свете такой программы, в которой не было бы ни одного оператора присваивания. И в РНР - программе этот оператор, конечно же, тоже есть. Мы уже с ним встречались, это - знак равенства (=): $ имя_переменной = значение;

В этой статье, я попытаюсь дать комплексный обзор обо всех видах переменных существующих в PHP.

Переменная в PHP — это именованная область в памяти, которая хранит в себе какие-либо данные: числа, строки (текст) и т.д. У каждой переменной в памяти имеется свой уникальный адрес, который даётся ей при её создании. Имя переменной ссылается на этот адрес.

У переменной имеется имя (которое вы придумываете сами при создании переменной), обращаясь к переменной по имени, можно получить данные которая она в себе хранит. Получая доступ к переменной по её имени, мы можем оперировать данными хранящимися в переменной: сохранять, считывать, изменять и удалять их.

Имена переменных в PHP начинаются со знака доллара $ :

$имяПеременной; // объявление переменной $имяПеременной = значение; // инициализация переменной

При инициализации, переменная создаётся автоматически, поэтому её можно и не объявлять:

$имяПеременной = значение; // одновременное объявление и инициализация переменной

Значения переменных в PHP

В качестве значения переменной, могут выступать:
— обычные значения (строки, числа, boolean и т.д.),
— другие переменные,
— ссылочные переменные,
— функции (значение которое возвращает функция),
— константы, массывы, объекты и т.д.

Приведём примеры присваивания переменным различных значений:

$var = 5; // присвоили переменной число $var = "Строка"; // присвоили переменной строку $var = true; // присвоили переменной булево значение $var = NULL; // присвоили переменной значение NULL $var = array(1, "два", true); // присвоили переменной массив $var = $var; // присвоили переменной элемент массива $var = $_POST["var"]; // присвоили переменной данные из формы $var = new Object(); // присвоили переменной объект

Виды переменных в PHP

Переменные в PHP подразделяются на несколько видов, рассмотрим их:

  • Обычные переменные (присваивание по значению).
  • Ссылочные переменные (присваивание по ссылке).
  • Переменные переменных (динамические переменные).

Ссылочные переменные в PHP

Имя обычной переменной ссылается на адрес в памяти , в которой хранятся данные, на один и тот же адрес памяти могут ссылаться несколько переменных. Для того чтобы на одни и те же данные ссылались несколько переменных, нам помогут ссылочные переменные.

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

$a = 5; $b = & $a; $a = 7; echo $b; // выведет 7

Если изменим значение переменной $b , то значение для переменной $a тоже изменится.

Переменные переменных в PHP

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

$hello = "world"; $a = "hello"; echo $a; // покажет hello echo $ $a; // покажет world

Разберём четвёртую строку:
echo $$a — это $ и $a , $a — это hello , соединяем $ и hello , получаем переменную $hello которая имеет значение world .

Разное о переменных в PHP

При обращении к несуществующей переменной, браузер покажет сообщение об ошибке, чтобы отключить сообщения об ошибках, можно использовать символ эт @ , пример:

Echo @$имяПеременной;

Если нужно отделить переменную от информации, но при этом записать их слитно, то можно использовать фигурные скобки { } .

Переменные в PHP представлены знаком доллара с последующим именем переменной. Имя переменной чувствительно к регистру.

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

Замечание : Под буквами здесь подразумеваются символы a-z, A-Z и байты от 128 до 255 (0x80-0xff ).

Замечание : $this - это специальная переменная, которой нельзя ничего присваивать.

Для информации о функциях работы с переменными обращайтесь к разделу функций работы с переменными .

$var = "Боб" ;
$Var = "Джо" ;
echo " $var , $Var " ; // выведет "Боб, Джо"

$ 4site = "еще нет" ; // неверно; начинается с цифры
$_4site = "еще нет" ; // верно; начинается с символа подчеркивания
$täyte = "mansikka" ; // верно; "ä" это (Расширенный) ASCII 228.
?>

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

PHP также предлагает иной способ присвоения значений переменным: присвоение по ссылке . Это означает, что новая переменная просто ссылается (иначе говоря, "становится псевдонимом" или "указывает") на оригинальную переменную. Изменения в новой переменной отражаются на оригинале, и наоборот.

$foo = "Боб" ; // Присваивает $foo значение "Боб"
$bar = & $foo ; // Ссылка на $foo через $bar.
$bar = "Меня зовут $bar " ; // Изменение $bar...
echo $bar ;
echo $foo ; // меняет и $foo.
?>

$foo = 25 ;
$bar = & $foo ; // Это верное присвоение.
$bar = &(24 * 7 ); // Неверно; ссылка на неименованное выражение.

Function test ()
{
return 25 ;
}

$bar = & test (); // Неверно.
?>

Хорошей практикой считается инициализировать переменные, хотя в PHP это и не является обязательным требованием. Неинициализированные переменные принимают значение по умолчанию в зависимости от их типа, который определяется из контекста их первого использования: булевы принимают значение FALSE , целые числа и числа с плавающей точкой - ноль, строки (например, при использовании в echo ) - пустую строку, а массивы становятся пустыми массивами.

Пример #1 Значения по умолчанию в неинициализированных переменных

// Неустановленная И не имеющая ссылок (то есть без контекста использования) переменная; выведет NULL
var_dump ($unset_var );

// Булевое применение; выведет "false" (Подробнее по этому синтаксису смотрите раздел о тернарном операторе)
echo($unset_bool ? "true\n" : "false\n" );

// Строковое использование; выведет "string(3) "abc""
$unset_str .= "abc" ;
var_dump ($unset_str );

// Целочисленное использование; выведет "int(25)"
$unset_int += 25 ; // 0 + 25 => 25
var_dump ($unset_int );

// Использование в качестве числа с плавающей точкой (float/double); выведет "float(1.25)"
$unset_float += 1.25 ;
var_dump ($unset_float );

// Использование в качестве массива; выведет array(1) { => string(3) "def" }
$unset_arr [ 3 ] = "def" ; // array() + array(3 => "def") => array(3 => "def")
var_dump ($unset_arr );

// Использование в качестве объекта; создает новый объект stdClass (см. http://www..classes.php)
// Выведет: object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
$unset_obj -> foo = "bar" ;
var_dump ($unset_obj );
?>

Полагаться на значения по умолчанию неинициализированных переменных довольно проблематично при включении файла в другой файл, использующий переменную с таким же именем. Это также большой риск в системе безопасности при включенной опции register_globals . В случае работы с неинициализированной переменной вызывается ошибка уровня E_NOTICE , за исключением случая добавления элементов в неинициализированный массив. Для обнаружения инициализации переменной может быть использована языковая конструкция isset() .

8 years ago

This page should include a note on variable lifecycle:

Before a variable is used, it has no existence. It is unset. It is possible to check if a variable doesn"t exist by using isset(). This returns true provided the variable exists and isn"t set to null. With the exception of null, the value a variable holds plays no part in determining whether a variable is set.

Setting an existing variable to null is a way of unsetting a variable. Another way is variables may be destroyed by using the unset() construct.

print isset($a ); // $a is not set. Prints false. (Or more accurately prints "".)
$b = 0 ; // isset($b) returns true (or more accurately "1")
$c = array(); // isset($c) returns true
$b = null ; // Now isset($b) returns false;
unset($c ); // Now isset($c) returns false;
?>

is_null() is an equivalent test to checking that isset() is false.

The first time that a variable is used in a scope, it"s automatically created. After this isset is true. At the point at which it is created it also receives a type according to the context.

$a_bool = true ; // a boolean
$a_str = "foo" ; // a string
?>

If it is used without having been given a value then it is uninitalized and it receives the default value for the type. The default values are the _empty_ values. E.g Booleans default to FALSE, integers and floats default to zero, strings to the empty string "", arrays to the empty array.

A variable can be tested for emptiness using empty();

$a = 0 ; //This isset, but is empty
?>

Unset variables are also empty.

empty($vessel ); // returns true. Also $vessel is unset.
?>

Everything above applies to array elements too.

$item = array();
//Now isset($item) returns true. But isset($item["unicorn"]) is false.
//empty($item) is true, and so is empty($item["unicorn"]

$item [ "unicorn" ] = "" ;
//Now isset($item["unicorn"]) is true. And empty($item) is false.
//But empty($item["unicorn"]) is still true;

$item [ "unicorn" ] = "Pink unicorn" ;
//isset($item["unicorn"]) is still true. And empty($item) is still false.
//But now empty($item["unicorn"]) is false;
?>

For arrays, this is important because accessing a non-existent array item can trigger errors; you may want to test arrays and array items for existence with isset before using them.

7 years ago

"Note: $this is a special variable that can"t be assigned."

While the PHP runtime generates an error if you directly assign $this in code, it doesn"t for $$name when name is "this".

$this = "text" ; // error

$name = "this" ;
$ $name = "text" ; // sets $this to "text"

?>

2 years ago

I highly recommend to use an editor that can list all variable names in a separate window.

The reason are typing errors in variable names.

$somename = "nobody" ;
// Now we want to use $somename somewhere
echo $somemane ;
?>
And wonder why it doesn"t print "nobody".
The reason is simple, we have a typing error in $somename and $somemane is a new variable.

In this example it might be easy to find. But if you use variables to calculate some things, you might hardly find it and ask yourself why your calculation is always wrong.
With an editor that list all variable names in a separate window such "double" variables but with wrong typing can be easily found.

BTW:
It would have been better, if the PHP language would require to use some sort of keyword to define a variable the first time.

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

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

Примеры корректных переменных в PHP: $per, $p1e2r3e, $user_10, $_user_10, $prosto_dlinnaya_peremennaya и т.д.

Стоит отметить, что PHP чувствителен к регистру, а значит переменные $pEr, $per, $PER - будут разные. Например:

//можно было написать и так: echo $pEr.", ".$per.", ".$PER; //точка "." является в роли "плюса" ?>

На экране будет выведено: 1, 2, 3.

В PHP не надо указывать явно тип данных у переменных. Одна и та же переменная может иметь разные типы данных в одной программе. Приведу пример.

// переменная $text имеет числовой тип echo $text; // вывод на экран 12345 $text = "Текст"; // переменная $text имеет строковый тип echo $text; // вывод на экран "Текст" $text = 5+5; // переменная $text имеет опять числовой тип echo $text; // вывод на экран 10 ?>

Чтобы вывести текст $text (название самой переменной) нужно поставить перед ней обратный слэш "\":

// вывод на экран $text = Текст ?>

Существует специальная функция unset(имя_переменной) , которая позволяет уничтожать объявленные переменные. В основном это делается для освобождения памяти. Например:

// объявление переменной $text

"; // В данном случае будет выведено, что $text существует echo "Запускаем процедуру unset
"; unset($text); // Удаляем переменную $text if(isset($text)) echo "Переменная $text существует
"; else echo "Переменная $text не существует
"; // Будет выведено, что переменная $text не существует ?>

С помощью функции isset(имя_переменной) можно проверять существование переменных. Функция возвращает true (истина) в случае существования и false (ложь) в противном случае. Очень похожей функцией является empty(имя_переменной) , которая возвращает true в случае если переменная не существует, равна нулю или пустой строке и false в противном случае.

Константы в PHP

Константы в PHP в отличии от переменных очень похожи на константы в других языках, поскольку они не могут менять своё значение. Для объявление константы в PHP есть специальная функция define("ИМЯ_КОНСТАНТЫ", значение_константы) . Приведем пример:

//некорректное объявление константы //поскольку первый символ должен быть не цифрой ?>

Требования к именованию констант аналогичны требованиям именованию переменных. По этой причине в рассмотренном примере выше, последнее объявление константы "1CON" является некорректным.

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

Для проверки существования константы существует специальная функция defined(ИМЯ_КОНСТАНТЫ) , которая выдает true (истина) в случае существования константы и false (ложь) в другом случае. Приведем пример использования функции defined:

В PHP есть так же предопределенные константы, которые Вы можете видеть в таблице:

Пример применения выше описанных предопределенных констант приведен ниже:

Строка: ".__LINE__; ?>

Внешние переменные в PHP

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

Протокол HTTP позволяет передавать и считывать данные с помощью методов GET и POST . Выбор метода можно задать в html-формах (см. тег form).

Эти методы (GET и POST) являются очень важными, поэтому для описание этих методов был посвящен целый урок 3:



Эта статья также доступна на следующих языках: Тайский

  • Next

    Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

    • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

      • Next

        В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ. Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо. Желаю вам удачи и берегите себя в азиатских краях.

  • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
    https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png