Переменные в пхп. Основы. Неправильные названия переменных, например

Последнее обновление: 1.11.2015

Как и во многих языках программирования, в PHP есть переменные. Переменные хранят отдельные значения, которые можно использовать в выражениях на PHP. Для обозначения переменных используется знак доллара $ . Например,

Здесь определена переменная, которая будет хранить число 10. Присвоение значения происходит с помощью знака равенства = .

Можно присваивать значение другой переменной:

$a = 10; $b=$a; echo $b;

PHP является регистрозависимым языком, а значит, переменные $counter и $Counter будут представлять две разные переменные.

Также при наименовании переменных нам надо учитывать следующие правила:

    Имена переменных должны начинаться с алфавитного символа или с подчеркивания

    Имена переменных могут содержать только символы: a–z, A–Z, 0–9, и знак подчеркивания

    Имена переменных не должны включать в себя пробелы

Проверка существования переменной. Оператор isset

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

При попытке вывести значение переменной мы получим диагностическое сообщение о том, что переменная не определена: Notice: Undefined variable: a in C:\localhost\echo.php on line 3 .

Оператор isset() позволяет определить, инициализирована ли переменная или нет. Если переменная определена, то isset() возвращает значение true . Если переменная не определена, то isset() возвращает false . Например:

Для проверки переменной использовалась конструкция if...else , которая определяет истинность выражения. И если выражение истинно, тогда выполняется выражение после блока if. Если же выражение ложно (то есть равно false), выполняется выражение после блока else

Здесь переменная не инициализирована, поэтому оператор isset($a) будет возвращать значение false , и, следовательно, будет срабатывать блок else . Если бы мы присвоили переменной некоторое начальное значение, например, $a=20 , то оператор isset возвратил бы значение true , и браузер вывел бы ее значение.

С помощью оператора unset() мы можем уничтожить переменную:

Переменные в 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 указано даже, что можно применять не только латиницу, но и любые символы, в том числе и русские буквы.

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

Если название переменой состоит из нескольких слов, то писать их надо слитно, без пробела, и каждое слово, кроме первого начинать с заглавной буквы. Первое слово лучше начинать с маленькой буквы. Можно разделить слова знаком подчёркивания.

Имена переменных чувствительны к регистру букв, что конечно упрощает их выбор, так как next и nExt уже будут два разных имени.

Давайте напишем скрипт с переменными, и выведем содержащиеся в них данные на экран.

$next = "Это данные в переменной";
$nExt = "Это данные в другой переменной";
echo "$next. $nExt";
?>

Браузер должен показать вот такую строку.

Разберём скрипт по составу.

$ — с этого знака всегда начинается имя переменной.
nExt — имя переменной.
= — оператор присвоения.
"Это данные в другой переменной" — значение переменной.
echo — команда вывод на экран.
?> — конечный тег php

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

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

И в подтверждении этого ещё один скрипт, в котором для вывода на экран используется только название переменной.

$scolco_let= 5.5 ;
$marcaAvto= "Лада";
$probegAvto= 100 ;

?>

Как видите, для разделения числовых значений, в качестве разделителя в php применяется точка.

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

Делается это следующим образом: после имени переменной ставится нужный математический оператор, определяющий вид действия (+, -, *, /), затем оператор присвоения (=), и число, на которое нужно произвести действие.

$x= 10 ;
$x+= 10 ;
echo "$x";
?>

Эта программа выведет число 20.

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

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

Если по простому, то тип переменной определяется её содержанием. Если в переменной число — это integer или double (числовые типы), если строка — строковой тип string и т.д.

На имя переменной её тип не влияет, т.е. по имени невозможно определить к какому типу переменная относится.

Для определения типа переменной, при необходимости, есть специальная функция, но об этом чуть ниже.

Основные типы переменных:

integer — Целые числа разрядность которых зависит от разрядности операционной системы компьютера.

Если она составляет 32 бита то число может принимать значение от -2 147 483 648 до 2 147 483 647, если разрядность 64 бита, то от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.

double (float) — Число с плавающей точкой значение которого возможно от 1.7 х 10 -308 до 1.7 х 10 308 с любым знаком (+ или -).

string — Строковый тип. может хранить строки любого объёма.

boolean — логический тип принимающий лишь два значения: true (истина) и false (ложь).

array — Тип массивы — это объединение нескольких однотипных переменных.

object — Тип объект — объединение нескольких разнотипных переменных и методов их обработки.

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

NULL — Специальный тип, предупреждающий о том что переменная не была инициализирована.

Рассмотрим их в общих чертах по порядку. Хоть переменные php и не требуют строгого задания типа, при их объявлении, но общие понятия о них, думаю, иметь всё же необходимо.

Целые числа (integer) .

Целые числа — это наиболее простой, а значит и наиболее быстродействующий тип данных. По умолчанию задаются они в десятичной системе исчисления. Однако php допускает задавать их в восьмеричной и шестнадцатеричной системах.

Что это значит? В восьмеричной системе основанием числа служит величина 8, так же как 10 в десятичной системе, а для всех чисел используются цифры от 0 до 7

В шестнадцатеричной, соответственно, величина 16, и цифры от 0 до 9. Кроме того в шестнадцатеричной системе для выражения числа применяются буквы английского алфавита A, B, C, D, E, F, обозначающие цифры, соответственно 10, 11, 12, 13, 14, 15.

В значениях переменных перед числом в восьмеричной системе ставиться префикс 0, а в шестнадцатеричной — 0х

$next= 123 ; //десятичное число
$next= 0123 ; //восьмеричное число
$next= 0x123 ; //шестнадцатеричное число
$next= 0xABCDEF ; //шестнадцатеричное число
?>

Число с плавающей точкой, вещественное число (double или float) .

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

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

//Объявление вещественного числа в стандартной форме
$next= 1.23456 ;
$next= -1.23456 ; //Отрицательное вещественное число
//Объявление вещественного числа в научной форме
$next= 1.23456 ; //Положительное вещественное число
$next= 1.23456e+2 ; //Положительное число больше единицы (123.456)
$next= 1.23456e-2 ; //Положительное число меньше единицы (0.0123456)
?>

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

Строки (string)

Строки могут принимать любой, произвольный размер, и формируются путём заключения той или иной фразы в кавычки. В php используется 3 вида кавычек.

Это прямые двойные кавычки, прямые одиночные кавычки (апострофы), и прямые обратные кавычки (обратные апострофы).

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

echo "Зададим class="next" для следующих элементов";
?>

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

$scolco_let= 5.5 ;
$marcaAvto= "Лада";
$probegAvto= 100 ;
echo "За $scolco_let лет $marcaAvto проехала $probegAvto тыс. км.";
?>

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

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

echo "Зададим class=\"next\" для следующих элементов";
?>

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

$next= "Бензо";
echo "Работает {$next}-генератор."; //Работает Бензо-генератор.
echo "Засорился {$next}насос."; //Засорился Бензонасос.
?>

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

Как уже говорилось выше, переменные этого типа могут принимать только два значения — TRUE (истина) и FALSE (ложь). Используются они для сравнения и управления циклами.

Более подробно их рассмотрим в статье посвящённой операторам php.

Массивы(array)

Массивы — это набор данных, состоящий из однотипных элементов.

$next[ 0 ]= "Бульдог";
$next[ 1 ]= "Питбуль";
$next[ 2 ]= "Дог";
echo $next[ 0 ] ;
echo "
";
echo $next[ 1 ] ;
echo "
";
echo $next[ 2 ] ;
?>

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

Объект(object)

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

Структура объекта схожа с массивом, только для доступа к его отдельным элементам применяются не квадратные скобки, а оператор ->.

Инициализации объекта осуществляется выражением new, которое создаёт в переменной экземпляр объекта.

class foo
{
function do_foo()
{
echo "Doing foo.";
}
}

$bar = new foo;
$bar-> do_foo();
?>

К объектам мы ещё вернёмся и будем изучать их более подробно.

Специальный тип NULL предназначен для того, чтоб отметить неинициализированную переменную. Такая переменная образуется, если в ней пропущен оператор присвоения = , или если она уничтожается конструкцией unset() .

Определение типа переменной

Для определения типа переменной, в php поддерживается несколько типов функций. Это функции проверяющие принадлежность переменной к определённому типу данных (is_string() , is_integer() , is_bolead() и так далее).

Все они начинаются префиксом is_ после которого идёт название типа.

Универсальной функцией, позволяющей определить тип любой переменной, является функция gettype() . Получив в качестве аргумента переменную, она возвращает её тип.

//Объявляем переменную с целым числом
$next= 123 ;
echo gettype($next); //выведет integer

//Объявляем переменную с вещественным числом
$next= 1.23456 ;
echo gettype($next); //выведет double

//Объявляем переменную со строкой
$next= "......";
echo gettype($next); //выведет string
?>

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


Перемена

– Мама! А правда я такая страшная?
– Сейчас ничего, а когда родилась, доктор сказал: «Зашевелится, стреляйте…»

12 years ago

A little gotcha to watch out for:

If you turn off RegisterGlobals and related, then use get_defined_vars(), you may see something like the following:

Array
[ GLOBALS ] => Array
[ GLOBALS ] => Array
* RECURSION *
[ _POST ] => Array()
[ _GET ] => Array()
[ _COOKIE ] => Array()
[ _FILES ] => Array()
)

[ _POST ] => Array()
[ _GET ] => Array()
[ _COOKIE ] => Array()
[ _FILES ] => Array()

)
?>

Notice that $_SERVER isn"t there. It seems that php only loads the superglobal $_SERVER if it is used somewhere. You could do this:

print "

"
.
htmlspecialchars
(print_r
(get_defined_vars
(),
true
)) .
"
" ;
print "
"
.
htmlspecialchars
(print_r
($_SERVER
,
true
)) .
"
" ;
?>

And then $_SERVER will appear in both lists. I guess it"s not really a gotcha, because nothing bad will happen either way, but it"s an interesting curiosity nonetheless.

6 years ago

Since get_defined_vars() only gets the variables at the point you call the function, there is a simple way to get the variables defined within the current scope.

// The very top of your php script
$vars = get_defined_vars ();

// Now do your stuff
$foo = "foo" ;
$bar = "bar" ;

// Get all the variables defined in current scope
$vars = array_diff (get_defined_vars (), $vars );

echo "

"
;
print_r ($vars );
echo "
" ;
?>

15 years ago

Here is a function which generates a debug report for display or email
using get_defined_vars. Great for getting a detailed snapshot without
relying on user input.

function generateDebugReport ($method , $defined_vars , $email = "undefined" ){
// Function to create a debug report to display or email.
// Usage: generateDebugReport(method,get_defined_vars(),email);
// Where method is "browser" or "email".

// Create an ignore list for keys returned by "get_defined_vars".
// For example, HTTP_POST_VARS, HTTP_GET_VARS and others are
// redundant (same as _POST, _GET)
// Also include vars you want ignored for security reasons - i.e. PHPSESSID.
$ignorelist =array("HTTP_POST_VARS" , "HTTP_GET_VARS" ,
"HTTP_COOKIE_VARS" , "HTTP_SERVER_VARS" ,
"HTTP_ENV_VARS" , "HTTP_SESSION_VARS" ,
"_ENV" , "PHPSESSID" , "SESS_DBUSER" ,
"SESS_DBPASS" , "HTTP_COOKIE" );

$timestamp = date ("m/d/y h:m:s" );
$message = "Debug report created $timestamp \n" ;

// Get the last SQL error for good measure, where $link is the resource identifier
// for mysql_connect. Comment out or modify for your database or abstraction setup.
global $link ;
$sql_error = mysql_error ($link );
if($sql_error ){
$message .= "\nMysql Messages:\n" . mysql_error ($link );
}
// End MySQL

// Could use a recursive function here. You get the idea ;-)
foreach($defined_vars as $key => $val ){
if(is_array ($val ) && ! in_array ($key , $ignorelist ) && count ($val ) > 0 ){
$message .= "\n $key array (key=value):\n" ;
foreach($val as $subkey => $subval ){
if(! in_array ($subkey , $ignorelist ) && ! is_array ($subval )){
$message .= $subkey . " = " . $subval . "\n" ;
}
elseif(! in_array ($subkey , $ignorelist ) && is_array ($subval )){
foreach($subval as $subsubkey => $subsubval ){
if(! in_array ($subsubkey , $ignorelist )){
$message .= $subsubkey . " = " . $subsubval . "\n" ;
}
}
}
}
}
elseif(!
is_array ($val ) && ! in_array ($key , $ignorelist ) && $val ){
$message .= "\nVariable " . $key . " = " . $val . "\n" ;
}
}

If($method == "browser" ){
echo nl2br ($message );
}
elseif($method == "email" ){
if($email == "undefined" ){
$email = $_SERVER [ "SERVER_ADMIN" ];
}

$mresult = mail ($email , "Debug Report for " . $_ENV [ "HOSTNAME" ]. "" , $message );
if($mresult == 1 ){
echo "Debug Report sent successfully.\n" ;
}
else{
echo "Failed to send Debug Report.\n" ;
}
}
}
?>

17 years ago

Simple routine to convert a get_defined_vars object to XML.

function obj2xml ($v , $indent = "" ) {
while (list($key , $val ) = each ($v )) {
if ($key == "__attr" ) continue;
// Check for __attr
if (is_object ($val -> __attr )) {
while (list($key2 , $val2 ) = each ($val -> __attr )) {
$attr .= " $key2 =\" $val2 \"" ;
}
}
else $attr = "" ;
if (is_array ($val ) || is_object ($val )) {
print(" $indent < $key$attr >\n" );
obj2xml ($val , $indent . " " );
print(" $indent \n" );
}
else print(" $indent < $key$attr > $val \n" );
}
}

//Example object
$x -> name -> first = "John" ;
$x -> name -> last = "Smith" ;
$x -> arr [ "Fruit" ] = "Bannana" ;
$x -> arr [ "Veg" ] = "Carrot" ;
$y -> customer = $x ;
$y -> customer -> __attr -> id = "176C4" ;

$z = get_defined_vars ();
obj2xml ($z [ "y" ]);
?>
will output:


John
Smith


Bannana
Carrot

10 years ago

As a note, get_defined_vars() does not return a set of variable references (as I hoped). For example:

// define a variable
$my_var = "foo" ;

// get our list of defined variables
$defined_vars = get_defined_vars ();

// now try to change the value through the returned array
$defined_vars [ "my_var" ] = "bar" ;

echo $my_var , "\n" ;

?>

will output "foo" (the original value). It"d be nice if get_defined_vars() had an optional argument to make them references, but I imagine its a rather specialized request. You can do it yourself (less conveniently) with something like:

$defined_vars = array();
$var_names = array_keys (get_defined_vars ());

foreach ($var_names as $var_name )
{
$defined_vars [ $var_name ] =& $ $var_name ;
}

?>

1 year ago

I posted here before about "this" being in get_defined_vars.

It turns out it"s not always there but in certain cases it will inexplicably appear.

Php -r "
class Test {
public function a() {var_dump(array_keys(get_defined_vars()));$a = 123;}
public function b() {var_dump(array_keys(get_defined_vars()));$this;}
}
$t = new Test();
$t->a();
$t->b();
"

Array()
array("this")

This does not happen in PHP 7.2 but will happen in PHP 5.6.

1 year ago

Some comments here point out that this function wont return references. It does however return names and names are "references".

I would not recommend the suggestions here that convert it to references.

Public function x($a, $b, $c) {
foreach(array_keys(get_defined_vars()) as $key)
if($key !== "this")
$this->y(${$key});
}

Public function y(&$input) {
$input++;
}

Instead of ${} you can also use $$.

I have done some whacky things in my time to make extremely generic code but I"ve never had to do anything like the above. It might not even work (but should since it"s no different to $a[$key]).

You could also do $$key++ but I"ve never seen code like that which wasn"t horrifically bad (using dynamic where dynamic isn"t beneficial).

If you"re doing something like that then give it additional scrutiny.

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

Переменная является средством хранения значения, такого как текстовая строка «Hello World!» или целое значение 4. Переменная может быть использована в любом месте кода, вместо того, чтобы вводить фактические значения снова и снова. В PHP вы определяете переменную следующим образом:

  • $variable_name = Value;

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

Примечание: Кроме того, имена переменных чувствительны к регистру, так что используйте тоже самое написание при использовании переменной, что и при объявлении. Переменные $a_number и $A_number различные переменные в глазах PHP.

Небольшой пример с переменными

Итак, чтобы использовать переменные в языке php, мы должны сначала ее объявить (для этого придумать имя) и задать ей значение. Вот как это правильно сделать:

Примечание: PHP не требует объявления переменных перед использованием. Например, в Pascal нам бы потребовалось сначала объявить весь список переменных в разделе var. В пхп ничего такого не нужно.

Разрешенные названия переменных

Есть несколько правил, которые нужно соблюдать при выборе имени для ваших PHP переменных.

  • PHP переменных должны начинаться с буквы или символа подчеркивания «_».
  • PHP переменные могут состоять только из буквенно-цифровых знаков и символов подчеркивания. a-z, A-Z, 0-9, или _.
  • Переменные из более чем одного слова могут быть разделены подчеркиванием. $my_variable
  • Переменные из более чем одного слова также можно разделить регистром. $myVariable

На этом все. Теперь у вас в руках есть такой мощный инструмент, как переменные! Вперед, к новым урокам!