This question already has answers here:
Closed 11 years ago.
Possible Duplicate:
What does $$ mean in PHP?
Double dollar sign php
What is $$ in php.
This question is asked in a recent interview for a web developer position.
Thanks in advance!
This is a variable variable. They work by using a variable to contain the name of another variable like so:
$var = 'test';
$test = 'echod variable';
echo $$var;
// output echod variable
It's a variable variable:
Sometimes it is convenient to be able to have variable variable names.
That is, a variable name which can be set and used dynamically.
dynamic variable name,
for example
for($i = 0; $i<10; $i++)
{
$var_name = "d".$i;
echo $$var_name;
}
will echo the variables $d0, $d1, $d2, $d3... $d9
running this code would set $name
$value="name";
$$value="testing";
in other words, $name is now equal to "testing"
Related
This question already has answers here:
Using braces with dynamic variable names in PHP
(9 answers)
Closed 2 years ago.
I'm working on someone else's PHP code and my IDE (PHPstorm) is flagging this line with the error Cannot use [] for reading. The code works fine, but I'm trying to understand why with my limited PHP skills. I've seen double dollar signs in other files and with no error.
$somevar = ($test_me) ? "some-class" : "some-other-class";
$$somevar[] = $some_value; // $somevar[] is flagged
This is not the answer to your problem but what me and most other think you should do.
Switch to an array, that way you have one variable with everything that is variable in it.
You can loop the array to find what you need and you don't allocate variable names that may conflict with other variables.
$some_value =1;
$test_me = true;
$somevar = ($test_me) ? "some-class" : "some-other-class";
$arr[$somevar] = $some_value;
var_dump($arr);
This results in an associative array with the key "some-class" and value 1.
Use curly brackets { } for interpolation :
$somevar = "some-other-class";
${$somevar}[] = "foo";
var_dump(${$somevar});
Output :
array(1) {
[0] => string(3) "foo"
}
This question already has answers here:
Using braces with dynamic variable names in PHP
(9 answers)
Closed 6 years ago.
Using PHP variable variables with mysqli_fetch_assoc to auto-format variables like $column_name="some_value" (code below):
while ($account_row=mysqli_fetch_assoc($account_results))
{
foreach ($account_row as $key=>$value)
{
$$key=trim(stripslashes($value));
}
}
So if I have a column "username" and row value "someuser", this code creates:
$username="someuser";
However, in some cases I need variable names to be DIFFERENT from column names. For example, I need code to create:
$username_temp="someuser";
How could I do that? Using this code gives an error:
$$key."_temp"=trim(stripslashes($value));
No other ideas in my head.
change $$key."_temp" to ${$key."_temp"} have a look on below solution:
$value = 'test';
$key="someuser";
${$key."_temp"}=$value;
echo $someuser_temp; //output test
Please try this ${$key . "_temp"} = trim(stripslashes($value));
This question already has answers here:
php object attribute with dot in name
(5 answers)
Closed 7 years ago.
I have a json like the following
{"root":{
"version":"1",
"lastAlarmID":"123",
"proUser":"1",
"password":"asd123##",
"syncDate":"22-12-2014",
"hello.world":"something"
}
}
After json_decode(), I can get all the values except that of the last one hello.world, since it contain a dot.
$obj->root->hello.world doesn't work. I got solutions for doing it in Javascript but I want a solution in php.
$obj->root->{'hello.world'} will work.
ps: $obj->root->{hello.world} might not work.
b.t.w: Why not use Array? json_decode($json, true) will return Array. Then $a['root']['hello.world'] will always work.
You have two options here:
First option: convert the object to an array, and either access the properties that way, or convert the name to a safe one:
<?php
$array = (array) $obj;
// access the value here
$value = $array['hello.world'];
// assign a safe refernce
$array[hello_world] = &$array['hello.world'];
Second option: use quotes and brakets:
<?php
$value = $obj->root->{'hello.world'};
This is working
echo $test->root->{'hello.world'};
Check example
<?php
$Data='{"root":{
"version":"1",
"lastAlarmID":"123",
"proUser":"1",
"password":"asd123##",
"syncDate":"22-12-2014",
"hello.world":"something"}
}';
$test=json_decode($Data);
print_r($test);
echo $test->root->{'hello.world'};
?>
Output
something
You can use variable variables (http://php.net/manual/en/language.variables.variable.php):
$a = 'hello.world';
$obj->root->$a;
This question already has answers here:
How do I dynamically write a PHP object property name?
(5 answers)
Closed 7 years ago.
This is not only tricky to explain, but tricky to do:
I'm trying to access and replace
$myObject->customField[0] = "some value";
but if I do
$str = "customField";
$myObject->$str[0] = "some value";
That doesn't work and if I do
$str = "customField";
$obj = $myObject->$str;
$obj[0];
That won't work either. I can change the values if I don't do this dynamically but I'm having to loop through a lot so doing it dynamic will be very helpful.
EDIT (answer)
Turns out curly braces does the trick. ie
$str = "customField";
$myObject->{$str}[0] = "some value";
Why do you want to have dynamic property names? The best answer is: don't do it this way. Consider using an associative array instead:
$myObject->customFields = array();
$myObject->customFields[$str] = "some value";
This question already has answers here:
PHP Object Variable variables name?
(5 answers)
Closed 9 years ago.
Why does this work
foreach ($items as $i) {
$dataTitle = $this->dataTitle;
$title = $i->$dataTitle;
}
when this doesn't?
foreach ($items as $i) {
$title = $i->$this->dataTitle;
}
Is there a better way to do this?
Try this:
$title = $i->{$this->dataTitle};
Your expression is being parsed as:
$title = ($i->$this)->dataTitle;
$this referes to current object parsed in not obvious order. You need to use {expr} notation, to dynamicly evaluate property name.
Try to use {} around $this->dataTitle:
$title = $i->{$this->dataTitle};
Look at bottom part of last example in variable variables section of manual.