Переменные в php: PHP: Переменные — Manual

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».


❮ Предыдущий Далее ❯


NEW

Мы только что запустили
видео W3Schools

Узнать

ПАЛЕТКА ЦВЕТОВ
КОД ИГРЫ

Играть в игру




Лучшие учебники
Учебник по HTML
Учебник по CSS
Учебник по JavaScript
Учебник How To
Учебник по SQL
Учебник по Python
Учебник по W3. CSS
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery

3 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
Примеры jQuery


ФОРУМ | О

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 имена переменных чувствительны к регистру. Таким образом, имя переменной «color» отличается от Color, COLOR, COLor и т. д.

Файл: переменная3.php

«; эхо «Мой дом» . $ ЦВЕТ . «
«; echo «Моя лодка» . $ ЦВЕТ . «
«; ?>

Вывод:

 Моя машина красная
Примечание: Неопределенная переменная: ЦВЕТ в C:\wamp\www\variable.php в строке 4
Мой дом
Примечание. Неопределенная переменная: coLOR в C:\wamp\www\variable.php в строке 5.
Моя лодка
 

Переменная PHP: Правила

Переменные PHP должны начинаться только с буквы или символа подчеркивания.

Переменная PHP не может начинаться с цифр и специальных символов.

Файл: переменнаяvalid.php

$_b»; ?>

Вывод:

 привет
привет
 

Файл: variableinvalid.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *