PHP | Переменные
Последнее обновление: 28.02.2021
Переменные хранят отдельные значения, которые можно использовать в выражениях PHP. Для определения переменных
применяется знак доллара $
. Например:
$num;
Здесь определена переменная $num
. Поскольку определение переменной — это отдельная инструкция, она завершается
точкой с запятой.
Как правило, названия переменный начинаются с маленькой буквы или символа подчеркивания.
Стоит учитывать, что PHP является регистрозависимым языком, а значит, переменные $num
и $Num
будут представлять две разные переменные.
Также при наименовании переменных нам надо учитывать следующие правила:
Имена переменных должны начинаться с алфавитного символа или с подчеркивания
Имена переменных могут содержать только символы: a–z, A–Z, 0–9, и знак подчеркивания
Имена переменных не должны включать в себя пробелы
С помощью операции присвоения (=
) переменной присваивается определенное значение:
$num = 10;
Здесь определена переменная $num
, которая хранит число 10.
После определения переменной и присвоения ей значения мы можем использовать ее в выражениях PHP. Например, вывести ее значение на веб-страницу:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php // определение переменной $num $num = 10; // вывод значения переменной $num на веб-страницу echo $num; ?> </body> </html>
С помощью функции echo
значение переменной $num
выводится на веб-страницу. И при обращении к скрипту мы увидим
значение переменной $num
Отличительной особенностью переменных является то, что мы можем изменять их значение:
<?php // определение переменной $num $num = 10; // вывод значения переменной $num на веб-страницу echo $num; // меняем значение переменной $num = 22; echo $num; ?>
Также можно присваивать значение другой переменной:
$a = 15; $b = $a; echo $b;
Если переменная объявлена, но ей изначально не присвоено никакого значения (иначе говоря она не инициализирована), то нам будет проблематично ее использовать. Например:
<?php $num; echo $num; ?>
При попытке вывести значение переменной мы получим диагностическое сообщение о том, что переменная не определена:
Warning: Undefined variable $num in C:\localhost\hello.php on line 13 22
Поэтому перед использованием переменной ей следует присвоить начальное значение.
Вывод значения переменной
В предыдущих примерах для вывода значения переменной применялась команда echo, после которой указывалось выводимое значение. Однако есть и другой способ вывести значение переменной. Например, мы хотим одновременно вывести значения двух переменных:
<?php $num_1 = 11; $num_2 = 35; echo "num_1 = $num_1 num_2=$num_2"; ?>
Здесь функции echo
передается строка. Чтобы встроить в строку значение переменной, в этой сстроке указываем имя переменной вместе со знаком $.
И кода в строке PHP встретит выражение $num_1
, он заменит это выражение значением переменной $num_1.
$num_2
. В итоге при выполнении этого скрипта браузер отобразит значения обеих переменных:num_1 = 11 num_2=35
НазадСодержаниеВперед
Как устроены переменные в PHP / Хабр
Вроде простой вопрос, даже не понятно что на него ответить, правда?
Мы все знаем как создать переменную, как получить значение переменной, как взять ссылку на переменную в конце концов.
Но как они работают изнутри?
Что происходит в интерпретаторе, когда вы изменяете значение переменной? Или когда удаляете ее?
Как реализованы типы переменных?
В этой статье я постараюсь раскрыть именно эти темы.
Abstract
Переменные в PHP выражены в виде неких контейнеров, которые хранят в себе тип переменной, значение, кол-во ссылающихся переменных на этот контейнер, и флаг — является ли эта переменная ссылочной.
Отступление про структуры и указатели
Если вы никогда не писали на Си, то возможно не знаете про такие вещи, как структуры и указатели, которые очень широко тут используются и без которых пожалуй было бы очень сложно представить себе хоть сколько нибудь сложную программу на Си.
Структуры очень похожи на классы, только они не могут иметь методов, только данные, указатели на данные и указатели на функции. Объявляя структуру в Си, вы определяете тип данных, и теперь при определении переменной, вы можете написать имя этой структуры на месте типа той переменной, примерно так:
my_super_struct super_struct_instance;
Указатели — это как переменные-ссылки, только их значение — это адрес в памяти. На самом деле, это ссылки как указатели, только они ведут себя как разыменованные указатели. Лучше показать на коде:
// создали указатель foo, который будет указывать на переменную типа int int *foo; // создали переменную типа int int bar = 3; // взяли ссылку на переменную bar и присвоили ее указателю. // теперь foo хранит адрес ячейки памяти, в которой хранится bar foo = &bar; // с помощью астериска мы разыменовываем указатель (берем значение по его адресу) // и инкрементируем значение (*foo)++; // а так мы инкрементируем сам указатель, то есть после этой // операции указатель будет смотреть на другое значение foo++;
Контейнеры
Контейнером служит структура под названием zval, она выглядит так:
struct zval { zvalue_value value; zend_uchar type; // можно предположить, что это обычный char zend_uchar is_ref; zend_ushort refcount; };
Здесь есть такие типы, как:
- LONG
- BOOL
- DOUBLE
- STRING
- ARRAY
- OBJECT
- RESOURCE
- NULL
zvalue_value — это union. Union — это такой тип, в котором можно объявить несколько членов разных типов, но использоваться в итоге будет только один, вот как он дефайнится:
typedef union _zvalue_value { long lval; // integer double dval; // float struct { char *val; int len; } str; // string HashTable *ht; // array zend_object obj; // object } zvalue_value;
В итоге, когда вы будете создавать переменную этого типа, она займет в памяти ровно столько, сколько занимает самый тяжелый элемент юниона.
Зачем столько лишнего?
Теперь разберем — зачем тут, например, какой-то refcount?
А очень просто: когда вы присваиваете переменной значение другой переменной, то они обе ссылаются на один zval, а refcount инкрементируется.
(оригинал с собачкой тут)
Теперь, если вы захотите изменить значение одной из этих переменных, то PHP, увидя refcount больше 1, скопирует этот zval, сделает изменения там, и ваша переменная будет указывать уже на новый zval.
Если это немного формализовать, то это будет выглядеть примерно так:
PHP | Под капотом |
---|---|
$foo = "asd"; $bar = $foo; |
bar,foo: { type: string, value: str: val: "asd" len: 3 is_ref: 0 refcount: 2 } |
$bar .= "q"; |
foo: { type: string, value: str: val: "asd" len: 3 is_ref: 0 refcount: 1 } bar: { type: string, value: str: val: "asdq" len: 4 is_ref: 0 refcount: 1 } |
Эта техника называется copy on write и она позволяет неплохо снизить потребление памяти.
Также, refcount нужен сборщику мусора, который удаляет из памяти все zval-ы, у которых refcount = 0.
А что делать с ссылками и зачем вообще этот is_ref?
А что происходит со ссылками? Все очень просто: если вы создаете ссылку от переменной, то флаг is_ref становится равным 1, и больше вышеописанная оптимизация для этого zval-а применяться не будет. Поясню кодом:
PHP | Под капотом |
---|---|
$foo = "asd"; $bar = $foo; |
bar,foo: { type: string, value: str: val: "asd" len: 3 is_ref: 0 refcount: 2 } |
$zxc = &$foo; |
zxc,foo: { type: string, value: str: val: "asd" len: 3 is_ref: 1 refcount: 2 } bar: { // переменная bar была выделена в отдельный zval type: string, value: str: val: "asd" len: 3 is_ref: 0 refcount: 1 } |
$qwe = $foo; |
zxc,foo: { type: string, value: str: val: "asd" len: 3 is_ref: 1 refcount: 2 } bar: { type: string, value: str: val: "asd" len: 3 is_ref: 0 refcount: 1 } qwe: { // эта переменная тоже была выделена в отдельный zval type: string, value: str: val: "asd" len: 3 is_ref: 0 refcount: 1 } |
Конечно, если вы возьмете еще одну ссылку от foo, то refcount zval-а, на который ссылается foo, увеличится на один.
Пожалуй на этом (пока?) все, в следующей части поговорим о массивах.
PS не знаю кто как воспримет эти картинки, мне показалось это будет забавно 🙂 к сожалению сканера у меня нет
Переменные PHP
❮ Назад Далее ❯
Переменные — это «контейнеры» для хранения информации.
Создание (объявление) переменных PHP
В PHP переменная начинается со знака $
, за которым следует имя переменной:
Пример
$txt = «Hello world!»;
$х = 5;
$у = 10,5;
?>
Попробуйте сами »
После выполнения вышеуказанных операторов переменная $txt
будет содержать значение Привет, мир!
, переменная $x
будет содержать значение 5
,
а переменная $y
будет содержать значение 10,5
.
Примечание: При присвоении переменной текстового значения заключайте значение в кавычки.
Примечание: В отличие от других языков программирования, PHP не имеет команды для объявления переменной. Он создается в тот момент, когда вы впервые присваиваете значение Это.
Думайте о переменных как о контейнерах для хранения данных.
Переменные PHP
Переменная может иметь короткое имя (например, x и y) или более описательное имя (возраст, имя автомобиля, общий_объем).
Правила для переменных PHP:
- Переменная начинается со знака
$
, за которым следует имя переменной - Имя переменной должно начинаться с буквы или символа подчеркивания
- Имя переменной не может начинаться с цифры
- Имя переменной может содержать только буквенно-цифровые символы и символы подчеркивания (A-z, 0-9)., и _ )
- Имена переменных чувствительны к регистру (
$age
и$AGE
две разные переменные)
Помните, что имена переменных PHP вводятся с учетом регистра!
Выходные переменные
Оператор PHP echo
часто используется для вывода данных на экран.
В следующем примере показано, как вывести текст и переменную:
Пример
$txt = «W3Schools.com»;
echo «Я люблю $txt!»;
?>
Попробуйте сами »
Следующий пример выдаст тот же результат, что и предыдущий:
Example
$txt = «W3Schools.com»;
эхо «Люблю». $текст . «!»;
?>
Попробуйте сами »
В следующем примере будет выведена сумма двух переменных:
Example
$x = 5;
$у = 4;
эхо $x + $y;
?>
Попробуйте сами »
Примечание: Вы узнаете больше об операторе echo
и о том, как
для вывода данных на экран в следующей главе.
PHP является языком со свободной типизацией
Обратите внимание, что в приведенном выше примере нам не нужно было указывать PHP, к какому типу данных относится переменная.
PHP автоматически связывает тип данных с переменной в зависимости от ее значения. Поскольку типы данных не установлены в строгом смысле, вы можете делать такие вещи, как добавление строки к целому числу без возникновения ошибки.
В PHP 7 были добавлены объявления типов. Это дает возможность указать тип данных, ожидаемый при объявлении функции, и, включив строгое требование, выдаст «Fatal Error» при несоответствии типов.
Вы узнаете больше о strict
и нестрогие требования
и
объявления типов данных в главе «Функции PHP».
❮ Предыдущий Следующий ❯
ВЫБОР ЦВЕТА
Лучшие учебники
Учебное пособие по HTMLУчебное пособие по CSS
Учебное пособие по JavaScript
Учебное пособие
Учебное пособие по SQL
Учебное пособие по Python
Учебное пособие по W3.CSS
Учебное пособие по Bootstrap
Учебное пособие по PHP
Учебное пособие по Java
Учебное пособие по C++
Учебное пособие по jQuery
4 9004
Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3. CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery
Основные примеры
Примеры HTMLПримеры CSS
Примеры JavaScript
Примеры How To Примеры
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery2
FORUM | О
W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания. Используя W3Schools, вы соглашаетесь прочитать и принять наши условия использования, куки-файлы и политика конфиденциальности.
Copyright 1999-2022 Refsnes Data. Все права защищены.
W3Schools работает на основе W3.CSS.
Переменные PHP — javatpoint
В PHP переменная объявляется с использованием знака $ , за которым следует имя переменной. Вот несколько важных моментов, которые нужно знать о переменных:
- Поскольку PHP является свободно типизированным языком, нам не нужно объявлять типы данных переменных. Он автоматически анализирует значения и выполняет преобразования в правильный тип данных.
- После объявления переменной ее можно повторно использовать в коде.
- Оператор присваивания (=) используется для присвоения значения переменной.
Синтаксис объявления переменной в PHP приведен ниже:
$имяпеременной=значение;
Правила объявления переменной PHP:
- Переменная должна начинаться со знака доллара ($), за которым следует имя переменной.
- Может содержать только буквенно-цифровые символы и символы подчеркивания (A-z, 0-9, _).
- Имя переменной должно начинаться с буквы или символа подчеркивания (_).
- Имя переменной PHP не может содержать пробелы.
- Следует иметь в виду, что имя переменной не может начинаться с цифры или специальных символов.
- Переменные PHP чувствительны к регистру, поэтому $name и $NAME рассматриваются как разные переменные.
Переменная PHP: объявление строки, целого числа и числа с плавающей запятой
Давайте посмотрим на пример хранения строковых, целых и вещественных значений в переменных PHP.
Файл: variable1.php
«;
echo «целое число: $x
«;
echo «число с плавающей запятой: $y
«;
?>
Вывод:
Строка: строка приветствия целое число: 200 поплавок: 44,6
Переменная PHP: сумма двух переменных
Файл: variable2.php
Вывод:
Переменная PHP: чувствительна к регистру
В PHP имена переменных чувствительны к регистру.