Переменные

Содержание

Основы

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

Имена переменных соответствуют тем же правилам, что и остальные наименования в PHP. Правильное имя переменной должно начинаться с буквы или символа подчеркивания с последующими в любом количестве буквами, цифрами или символами подчеркивания Это можно отобразить регулярным выражением: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

Замечание: Для наших целей буквы здесь - это a-z, A-Z, и ASCII-символы со 127 по 255 (0x7f-0xff).

<?php
$var 
"Bob";
$Var "Joe";
echo 
"$var, $Var";      // выведет "Bob, Joe"

$4site 'not yet';     // неверно; начинается с цифры
$_4site 'not yet';    // верно; начинается с символа подчеркивания
$tдyte 'mansikka';    // верно; 'д' это (Дополнительный) ASCII 228.
?>

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

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

Для присвоения по ссылке, просто добавьте амперсанд (&) к началу имени присваиваемой (исходной) переменной. Например, следующий фрагмент кода дважды выводит 'My name is Bob':

<?php
$foo 
'Bob';              // Присваивает $foo значение 'Bob'
$bar = &$foo;              // Ссылка на $foo через $bar.
$bar "My name is $bar";  // Изменение $bar...
echo $bar;
echo 
$foo;                 // меняет и $foo.
?>

Важно отметить, что по ссылке могут быть присвоены только именованные переменные.

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

function test()
{
   return 
25;
}

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

Коментарии

You don't necessarily have to escape the dollar-sign before a variable if you want to output its name.

You can use single quotes instead of double quotes, too.

For instance:

<?php
$var 
"test";

echo 
"$var"// Will output the string "test"

echo "\$var"// Will output the string "$var"

echo '$var'// Will do the exact same thing as the previous line
?>

Why?
Well, the reason for this is that the PHP Parser will not attempt to parse strings encapsulated in single quotes (as opposed to strings within double quotes) and therefore outputs exactly what it's being fed with :)

To output the value of a variable within a single-quote-encapsulated string you'll have to use something along the lines of the following code:

<?php
$var 
'test';
/*
Using single quotes here seeing as I don't need the parser to actually parse the content of this variable but merely treat it as an ordinary string
*/

echo '$var = "' $var '"';
/*
Will output:
$var = "test"
*/
?>

HTH
- Daerion
2004-01-20 10:15:00
http://php5.kiev.ua/manual/ru/language.variables.html
<?php
error_reporting
(E_ALL);

$name "Christine_Nothdurfter";
// not Christine Nothdurfter
// you are not allowed to leave a space inside a variable name ;)
$$name "'s students of Tyrolean language ";

print 
" $name{$$name}<br>";
print 
"$name$Christine_Nothdurfter";
// same
?>
2004-05-25 13:58:15
http://php5.kiev.ua/manual/ru/language.variables.html
Автор:
You can also construct a variable name by concatenating two different variables, such as:

<?php

$arg 
"foo";
$val "bar";

//${$arg$val} = "in valid";     // Invalid
${$arg $val} = "working";

echo 
$foobar;     // "working";
//echo $arg$val;         // Invalid
//echo ${$arg$val};     // Invalid
echo ${$arg $val};    // "working"

?>

Carel
2005-01-07 05:02:21
http://php5.kiev.ua/manual/ru/language.variables.html
As with echo, you can define a variable like this:

<?php

$text 
= <<<END

<table>
    <tr>
        <td>
             $outputdata
        </td>
     </tr>
</table>

END;

?>

The closing END; must be on a line by itself (no whitespace).

[EDIT by danbrown AT php DOT net: This note illustrates HEREDOC syntax.  For more information on this and similar features, please read the "Strings" section of the manual here: language.types.string ]
2005-05-17 16:06:22
http://php5.kiev.ua/manual/ru/language.variables.html
Автор:
Variables can also be assigned together.

<?php
$a 
$b $c 1;
echo 
$a.$b.$c;
?>

This outputs 111.
2005-08-31 08:09:52
http://php5.kiev.ua/manual/ru/language.variables.html
When using variable variables this is invalid:

<?php
$my_variable_
{$type}_name true;
?>

to get around this do something like:

<?php
$n
="my_variable_{$type}_name";
${
$n} = true;
?>

(or $$n - I tend to use curly brackets out of habit as it helps t reduce bugs ...)
2005-11-10 03:25:23
http://php5.kiev.ua/manual/ru/language.variables.html
References and "return" can be flakey:

<?php
//  This only returns a copy, despite the dereferencing in the function definition
function &GetLogin ()
{
    return 
$_SESSION['Login'];
}

//  This gives a syntax error
function &GetLogin ()
{
    return &
$_SESSION['Login'];
}

//  This works
function &GetLogin ()
{
   
$ret = &$_SESSION['Login'];
    return 
$ret;
}
?>
2005-11-25 16:03:14
http://php5.kiev.ua/manual/ru/language.variables.html
As an addendum to David's 10-Nov-2005 posting, remember that curly braces literally mean "evaluate what's inside the curly braces" so, you can squeeze the variable variable creation into one line, like this:

<?php
 
${"title_default_" $title} = "selected";
?>

and then, for example:

<?php
  $title_select 
= <<<END
    <select name="title">
      <option>Select</option>
      <option $title_default_Mr  value="Mr">Mr</option>
      <option $title_default_Ms  value="Ms">Ms</option>
      <option $title_default_Mrs value="Mrs">Mrs</option>
      <option $title_default_Dr  value="Dr">Dr</option>
    </select>
END;
?>
2007-02-20 10:48:25
http://php5.kiev.ua/manual/ru/language.variables.html
Автор:
[EDIT by danbrown AT php DOT net: The function provided by this author will give you all defined variables at runtime.  It was originally written by (john DOT t DOT gold AT gmail DOT com), but contained some errors that were corrected in subsequent posts by (ned AT wgtech DOT com) and (taliesin AT gmail DOT com).]

<?php

echo '<table border=1><tr> <th>variable</th> <th>value</th> </tr>';
foreach( 
get_defined_vars() as $key => $value
{
    if (
is_array ($value) )
    {
        echo 
'<tr><td>$'.$key .'</td><td>';
        if ( 
sizeof($value)>)
        {
        echo 
'"<table border=1><tr> <th>key</th> <th>value</th> </tr>';
        foreach (
$value as $skey => $svalue
        {
            echo 
'<tr><td>[' $skey .']</td><td>"'$svalue .'"</td></tr>';
        }
        echo 
'</table>"';
        }
             else
        {
            echo 
'EMPTY';
        }
        echo 
'</td></tr>';
    }
    else
    {
            echo 
'<tr><td>$' $key .'</td><td>"'$value .'"</td></tr>';
    }
}
echo 
'</table>';
?>
2008-07-20 09:25:28
http://php5.kiev.ua/manual/ru/language.variables.html
This is mine type casting lib, that is very useful for me.

<?php 

function CAST_TO_INT($var$min FALSE$max FALSE)
{
   
$var is_int($var) ? $var : (int)(is_scalar($var) ? $var 0);
    if (
$min !== FALSE && $var $min)
        return 
$min;
    elseif(
$max !== FALSE && $var $max)
        return 
$max;
    return 
$var;
       
}

function 
CAST_TO_FLOAT($var$min FALSE$max FALSE)
{
   
$var is_float($var) ? $var : (float)(is_scalar($var) ? $var 0);
    if (
$min !== FALSE && $var $min)
        return 
$min;
    elseif(
$max !== FALSE && $var $max)
        return 
$max;
    return 
$var;
}

function 
CAST_TO_BOOL($var)
{
    return (bool)(
is_bool($var) ? $var is_scalar($var) ? $var FALSE);
}

function 
CAST_TO_STRING($var$length FALSE)
{
    if (
$length !== FALSE && is_int($length) && $length 0)
        return 
substr(trim(is_string($var)
                    ? 
$var
                   
: (is_scalar($var) ? $var '')), 0$length);

    return 
trim(
               
is_string($var)
                ? 
$var
               
: (is_scalar($var) ? $var ''));
}

function 
CAST_TO_ARRAY($var)
{
    return 
is_array($var)
            ? 
$var
           
is_scalar($var) && $var
               
? array($var)
                : 
is_object($var) ? (array)$var : array();
}

function 
CAST_TO_OBJECT($var)
{
    return 
is_object($var)
            ? 
$var
           
is_scalar($var) && $var
               
? (object)$var
               
is_array($var) ? (object)$var : (object)NULL;
}

?>
2010-07-29 09:52:25
http://php5.kiev.ua/manual/ru/language.variables.html
I found interstate solution to work with arrays

<?php
$vars
['product']['price']=11;

$aa='product';
$bb='price';

echo 
$vars{$aa}{$bb};

//prints 11
?>
2010-08-03 16:38:14
http://php5.kiev.ua/manual/ru/language.variables.html
Автор:
Note that if you use runtime variable name recognition in your code, you are able to use any string as a variable name. Consider following code:

<?php

$varName 
'foo with bar';
${
'foo with bar'} = 42;

// will output int(42)
var_dump($$varName);

?>

This can be useful for example when accessing a property of an object constructed from JSON:

<?php

$composerJson 
json_decode(file_get_contents(__DIR__ '/composer.json'));

// would output sth. similar to: object(stdClass)#...
var_dump(
   
$composerJson->{'require-dev'}
);

?>
2015-03-22 13:10:20
http://php5.kiev.ua/manual/ru/language.variables.html

    Поддержать сайт на родительском проекте КГБ