Detailed explanation of variable variable examples in php

怪我咯
Release: 2023-03-10 20:52:01
Original
2217 people have browsed it

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 = &#39;hello&#39;;
?>
Copy after login

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 = &#39;world&#39;;
?>
Copy after login

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}";
?>
Copy after login

outputs exactly the same result as the following statement:

<?php
echo "$a $hello";
?>
Copy after login

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 = &#39;I am bar.&#39;;
  var $arr = array(&#39;I am A.&#39;, &#39;I am B.&#39;, &#39;I am C.&#39;);
  var $r  = &#39;I am r.&#39;;
}
$foo = new foo();
$bar = &#39;bar&#39;;
$baz = array(&#39;foo&#39;, &#39;bar&#39;, &#39;baz&#39;, &#39;quux&#39;);
echo $foo->$bar . "\n";
echo $foo->$baz[1] . "\n";
$start = &#39;b&#39;;
$end  = &#39;ar&#39;;
echo $foo->{$start . $end} . "\n";
$arr = &#39;arr&#39;;
echo $foo->$arr[1] . "\n";
echo $foo->{$arr}[1] . "\n";
?>
Copy after login

The above routine will output:

I am bar.
I am bar.
I am bar.
I am r.
I am B.
Copy after login

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 ...//
?>
Copy after login

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";
?>
Copy after login

The above routine will output:

John
Doe
PHP.net
John
Doe
PHP.net
Copy after login

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;
}
Copy after login

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;
}
Copy after login

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;
}
Copy after login

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的详细信息
Copy after login

When we need to display information about multiple variables, we can also use it like this :

$name = &#39;张三&#39;;
$age = 18;
$gender = true;
var_dump($name, $age, $gender);
Copy after login

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
Copy after login

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());
}
Copy after login


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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template