Variable variable is a variable name that can be dynamically set and used. The grammatical form is a special syntax of PHP, which is rare in other languages. This article will share with you php variable variables Learning summary, friends who are interested in knowledge about php variable variables should learn together
The so-called variable variable means that the variable name of a variable can be dynamically set and used. The syntax form is PHP's special syntax, which is rare in other languages
Sometimes it is very convenient to use variable variable names. That is, the variable name of a variable can be set and used dynamically. An ordinary variable is set through declaration, for example:
<?php $a = 'hello'; ?>
A variable variable obtains the value of an ordinary variable as the variable name of the variable variable. In the above example, hello can be used as a variable variable after using two dollar signs ($). For example:
<?php $$a = 'world'; ?>
At this time, two variables are defined: the content of $a is "hello" and the content of $hello is "world". Therefore, the following statement:
<?php echo "$a ${$a}"; ?>
outputs exactly the same result as the following statement:
<?php echo "$a $hello"; ?>
They both output: hello world.
To use mutable variables with arrays, an ambiguity must be resolved. This is when writing $$a[1], the parser needs to know whether it wants $a[1] as a variable, or whether it wants $$a as a variable and extracts the variable with index [1] value. The syntax to solve this problem is to use ${$a[1]} for the first case and ${$a}[1] for the second case.
Class properties can also be accessed through variable property names. Mutable property names will be resolved within the scope of the call. For example, for the $foo->$bar expression, $bar will be parsed in the local scope and its value will be used as the property name of $foo. The same is true for $bar when it is an array cell.
You can also use curly braces to clearly delimit attribute names. Most useful when the property is in an array, or the property name contains multiple parts or the property name contains illegal characters (for example from json_decode() or SimpleXML).
Example #1 Variable attribute example
<?php class foo { var $bar = 'I am bar.'; var $arr = array('I am A.', 'I am B.', 'I am C.'); var $r = 'I am r.'; } $foo = new foo(); $bar = 'bar'; $baz = array('foo', 'bar', 'baz', 'quux'); echo $foo->$bar . "\n"; echo $foo->$baz[1] . "\n"; $start = 'b'; $end = 'ar'; echo $foo->{$start . $end} . "\n"; $arr = 'arr'; echo $foo->$arr[1] . "\n"; echo $foo->{$arr}[1] . "\n"; ?>
The above routine will output:
I am bar. I am bar. I am bar. I am r. I am B.
Example #2 Variable attribute example
<?php //You can even add more Dollar Signs $Bar = "a"; $Foo = "Bar"; $World = "Foo"; $Hello = "World"; $a = "Hello"; $a; //Returns Hello $$a; //Returns World $$$a; //Returns Foo $$$$a; //Returns Bar $$$$$a; //Returns a $$$$$$a; //Returns Hello $$$$$$$a; //Returns World //... and so on ...// ?>
Example #3 Variable attribute example
<?php // Given these variables ... $nameTypes = array("first", "last", "company"); $name_first = "John"; $name_last = "Doe"; $name_company = "PHP.net"; // Then this loop is ... foreach($nameTypes as $type) print ${"name_$type"} . "\n"; // ... equivalent to this print statement. print "$name_first\n$name_last\n$name_company\n"; ?>
The above routine will output:
John Doe PHP.net John Doe PHP.net
First, we need to write a PHP function To calculate the sum of two numbers, we can write it as follows:
/** *计算两个数的和,并返回计算的结果 * @param number $a * @param number $b * @return number */ function sum($a, $b){ return $a + $b; }
Similarly, if we need to calculate the sum of three numbers, we can write it as follows:
/** *计算两个或三个数的和,并返回计算的结果 * @param number $a * @param number $b * @return number $c 该参数可以不传入值,默认为0 */ function sum($a, $b, $c = 0){ return $a + $b + $c; }
At this time, if we need to calculate The sum of any number of numbers, so how do we need to write a PHP function?
Of course, you may consider using an array as a function parameter to achieve such a function:
/** *计算任意多个数的和,函数参数params必须为array类型 * @param array params */ function sum($params){ $total = 0; foreach ($params as $i){ $total += $i; } return $total; }
Well, there is indeed nothing wrong with this approach, because in During the program development process before the birth of variable parameters, when any number of parameters needed to be passed, arrays or other similar collections were used to represent them. However, doesn’t this kind of transmission seem clear and intuitive enough? As a PHP programmer, you should know that there is a function var_dump() in PHP for displaying detailed information about variables, for example:
$age = 18; var_dump($age); //显示变量$age的详细信息
When we need to display information about multiple variables, we can also use it like this :
$name = '张三'; $age = 18; $gender = true; var_dump($name, $age, $gender);
We know that var_dump() can receive any number of variables at the same time, and does not need to be passed in the form of an array. This method of parameter passing is more intuitive and elegant. This form of passing any number of parameters is called variable parameters. Of course, our sum() function can also be implemented in this way:
/** *计算任意多个数的和,并返回计算后的结果 */ function sum(){ //这里的括号中没有定义任何参数 $total = 0; //使用func_get_args()来获取当前函数的所有实际传递参数,返回值为array类型 $varArray = func_get_args(); foreach ($varArray as $var){ $total += $var; } return $total; } /*****下面是调用示例*****/ echo sum(1, 3, 5); //计算1+3+5 echo sum(1, 2); //计算1+2 echo sum(1, 2, 3, 4); //计算1+2+3+4
As shown in the above example, as long as the PHP built-in functionfunc_get_args() is used in the current function, The actual parameter array passed when calling the function can be used, and then we only need to process the parameter array.
Note 1: 1. If no parameters are passed in when calling, then the function func_get_args() still returns an array type, but an empty array (the array does not contain any element). 2.func_get_args() can only be called within a function, otherwise a warning message will be displayed. 3. The func_get_args() function can receive an index parameter to obtain the parameter at the specified index in the parameter array. For example, if you want to get the first argument passed in, you can call: func_get_args(1).
4. In addition, you can also call func_num_args() in the function, which can return the number of parameters passed in the current function call.
Note 2: The implementation of variable parameters in PHP is very similar to the implementation of variable parameters in JavaScript. PHP uses the built-in function func_get_args() to implement it, and JavaScriptuses the functionBuilt-in variable arguments to implement.
备注3:在最后的sum()函数代码中,sum()函数没有定义任何形式参数,所以调用该函数时可以传入0、1、2~n个参数的。不过,在一般情况下,计算和至少需要两个数来参与计算。因此,你可以在sum()函数的定义处,定义两个形式参数,例如:sum($a, $b),其他代码保持不变。这样,在调用该函数时,就必须传入至少两个参数。
备注4:由于PHP已经内置了计算数组中所有元素的和的函数array_sum(),因此上述代码的最终版本如下:
/** *计算任意多个数的和,并返回计算后的结果 */ function sum($a, $b){ return array_sum(func_get_args()); }
The above is the detailed content of Detailed explanation of variable variable examples in php. For more information, please follow other related articles on the PHP Chinese website!