Коментарии

References are great if you want to point to a variable which you don't quite know the value yet ;)

eg:

<?php
$error_msg 
= &$messages['login_error']; // Create a reference

$messages['login_error'] = 'test'// Then later on set the referenced value

echo $error_msg// echo the 'referenced value'
?>

The output will be:

test
2003-01-14 20:37:48
http://php5.kiev.ua/manual/ru/language.variables.html
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
<?php
// I am beginning to like curly braces.
// I hope this helps for you work with them
$filename0="k";
$filename1="kl";
$filename2="klm";
 
$i=0;
for (
$varname sprintf("filename%d",$i);   isset  ( ${$varname} ) ;   $varname sprintf("filename%d"$i)  )  { 
    echo 
"${$varname} <br>";
   
$varname sprintf("filename%d",$i);
   
$i++;
}
?>
2005-01-14 14:27:44
http://php5.kiev.ua/manual/ru/language.variables.html
Here's a function to get the name of a given variable.  Explanation and examples below.

<?php
 
function vname(&$var$scope=false$prefix='unique'$suffix='value')
  {
    if(
$scope$vals $scope;
    else     
$vals $GLOBALS;
   
$old $var;
   
$var $new $prefix.rand().$suffix;
   
$vname FALSE;
    foreach(
$vals as $key => $val) {
      if(
$val === $new$vname $key;
    }
   
$var $old;
    return 
$vname;
  }
?>

Explanation:

The problem with figuring out what value is what key in that variables scope is that several variables might have the same value.  To remedy this, the variable is passed by reference and its value is then modified to a random value to make sure there will be a unique match.  Then we loop through the scope the variable is contained in and when there is a match of our modified value, we can grab the correct key.

Examples:

1.  Use of a variable contained in the global scope (default):
<?php
  $my_global_variable 
"My global string.";
  echo 
vname($my_global_variable); // Outputs:  my_global_variable
?>

2.  Use of a local variable:
<?php
 
function my_local_func()
  {
   
$my_local_variable "My local string.";
    return 
vname($my_local_variableget_defined_vars());
  }
  echo 
my_local_func(); // Outputs: my_local_variable
?>

3.  Use of an object property:
<?php
 
class myclass
 
{
    public function 
__constructor()
    {
     
$this->my_object_property "My object property  string.";
    }
  }
 
$obj = new myclass;
  echo 
vname($obj->my_object_property$obj); // Outputs: my_object_property
?>
2005-02-14 18:42:27
http://php5.kiev.ua/manual/ru/language.variables.html
In addition to what jospape at hotmail dot com and ringo78 at xs4all dot nl wrote, here's the sintax for arrays:

<?php
//considering 2 arrays
$foo1 = array ("a""b""c");
$foo2 = array ("d""e""f");

//and 2 variables that hold integers
$num 1;
$cell 2;

echo ${
foo.$num}[$cell]; // outputs "c"

$num 2;
$cell 0;

echo ${
foo.$num}[$cell]; // outputs "d"
?>
2005-04-07 12:18:44
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
Автор:
In conditional assignment of variables, be careful because the strings may take over the value of the variable if you do something like this:

<?php
$condition 
true;

// Outputs " <-- That should say test"
echo "test" . ($condition) ? " <-- That should say test" "";
?>

You will need to enclose the conditional statement and assignments in parenthesis to have it work correctly:

<?php
$condition 
true;

// Outputs "test <-- That should say test"
echo "test" . (($condition) ? " <-- That should say test " "");
?>
2005-07-09 14:46:30
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
Simple sample and variables and html "templates":
The PHP code:
variables.php:
<?php
$SYSN
["title"] = "This is Magic!";
$SYSN["HEADLINE"] = "Ez magyarul van"// This is hungarian
$SYSN["FEAR"] = "Bell in my heart";
?>

index.php:
<?php
include("variables.php");
include(
"template.html");
?>

The template:
template.html

<html>
<head><title><?=$SYSN["title"]?></title></head>
<body>
<H1><?=$SYSN["HEADLINE"]?></H1>
<p><?=$SYSN["FEAR"]?></p>
</body>
</html>
This is simple, quick and very flexibile
2006-05-20 08:44:54
http://php5.kiev.ua/manual/ru/language.variables.html
Here's a pair of functions to encode/decode any string to be a valid php and javascript variable name.

<?php

function label_encode($txt) {
 
 
// add Z to the begining to avoid that the resulting 
  // label is a javascript keyword or it starts with a 
  // number
 
$txt 'Z'.$txt;
 
 
// encode as urlencoded data
 
$txt rawurlencode($txt);
 
 
// replace illegal characters
 
$illegal = array('%''-''.');
 
$ok = array('é''è''à');
 
$txt str_replace($illegal,$ok$txt);
 
  return 
$txt;
}

function 
label_decode($txt) {
 
 
// replace illegal characters
 
$illegal = array('%''-''.');
 
$ok = array('é''è''à');
 
$txt str_replace($ok$illegal$txt);
 
 
// unencode
 
$txt rawurldecode($txt);
 
 
// remove the leading Z and return
 
return substr($txt,1);
}

?>
2007-01-25 04:10:07
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
Here's a simple solution for retrieving the variable name, based on the lucas (language.variables#49997) solution, but shorter, just two lines =)

<?php
function var_name(&$var$scope=0)
{
   
$old $var;
    if ((
$key array_search($var 'unique'.rand().'value', !$scope $GLOBALS $scope)) && $var $old) return $key
}
?>
2007-07-07 00:13:36
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
This script has been running around for a while and has add many additions and changes, however I noticed that if you run it and there is an object assigned to a variable it will fail with 'Object of Class 'XXXX' cannot be converted to string'
so I changed it a little to ignore objects within the script and display the variables only:

Btw, it has haelped me an ENOURMOUS amount over the years especially when keeping track of variables that are being sent through request and if session variables are alive

<?php 

//this can be removed if you want to find out if you page has actually started a session, - this is sometimes a problem when relying on a session being started by an included/required file
if(!isset($_SESSION))
{
session_start();
}

//now begin the table
echo '<table border=1><tr> <th>variable</th> <th>value</th> </tr>'
foreach(
get_defined_vars() as $key => $value

//if the returned value is NOT an object...
   
if (is_array ($value) && !is_object($key) && !is_object($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 
        {
 
//and if these values are NOT an object...

   
if ( !is_object($skey) && !is_object($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>';
?>
2010-09-30 07:55:44
http://php5.kiev.ua/manual/ru/language.variables.html

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