ホームページ  >  記事  >  バックエンド開発  >  PHPで変数変数の例を詳しく解説

PHPで変数変数の例を詳しく解説

怪我咯
怪我咯オリジナル
2017-06-20 09:38:592164ブラウズ

変数 variable は、名前を動的に設定して使用できる変数です。構文形式は、他の言語では珍しい PHP の特別な構文です。この記事では、php 変数変数学習の概要を共有します。php 変数変数に関する知識に興味がある友人は、一緒に学習する必要があります

いわゆる。 variable 変数は変数です。変数名は動的に設定して使用できます。構文形式は PHP の特殊な構文であり、他の言語ではまれですが、変数変数名を使用すると非常に便利な場合があります。つまり、変数の変数名を動的に設定して使用することができます。通常の変数は宣言によって設定されます。例:

<?php
$a = &#39;hello&#39;;
?>

可変変数は、通常の変数の値を可変変数の変数名として取得します。上記の例では、2 つのドル記号 ($) を使用した後、hello を変数変数として使用できます。例:

<?php
$$a = &#39;world&#39;;
?>

このとき、$a の内容が「hello」、$hello の内容が「world」という 2 つの変数が定義されています。したがって、次のステートメント:

<?php
echo "$a ${$a}";
?>

は、次のステートメントとまったく同じ結果を出力します:

<?php
echo "$a $hello";
?>

両方とも、hello world を出力します。

配列で可変変数を使用するには、あいまいさを解決する必要があります。これは、$$a[1] を記述するときに、パーサーは $a[1] を変数として必要とするか、または $$a を変数として必要としてインデックス [1] 値を持つ変数を抽出するかを知る必要があります。この問題を解決する構文は、最初のケースには ${$a[1]} を使用し、2 番目のケースには ${$a}[1] を使用します。

クラス プロパティには、可変プロパティ名を通じてアクセスすることもできます。変更可能なプロパティ名は呼び出しのスコープ内で解決されます。たとえば、$foo->$bar 式の場合、$bar はローカル スコープで解析され、その値は $foo のプロパティ名として使用されます。 $bar が配列セルの場合も同様です。

中括弧を使用して属性名を明確に区切ることもできます。プロパティが配列内にある場合、プロパティ名に複数の部分が含まれている場合、またはプロパティ名に不正な文字が含まれている場合 (たとえば、json_decode() や SimpleXML からのもの) に最も役立ちます。

例 #1 変数属性の例

<?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";
?>
上記のルーチンは出力します:

I am bar.
I am bar.
I am bar.
I am r.
I am B.

例 #2 変数属性の例

<?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 ...//
?>

例 #3 変数属性の例

<?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";
?>
上記のルーチンは出力します:

John
Doe
PHP.net
John
Doe
PHP.net

まず、2 つの数値の合計を計算する PHP 関数を記述する必要があります。これは次のように記述できます。

/**
 *计算两个数的和,并返回计算的结果
 * @param number $a
 * @param number $b
 * @return number
 */
function sum($a, $b){
  return $a + $b;
}

同様に、3 つの数値の合計を計算する必要がある場合は、次のように記述できます。

/**
 *计算两个或三个数的和,并返回计算的结果
 * @param number $a
 * @param number $b
 * @return number $c 该参数可以不传入值,默认为0
 */
function sum($a, $b, $c = 0){
  return $a + $b + $c;
}

これ 任意の数の数値の合計を計算する必要がある場合、PHP 関数はどのように記述すればよいでしょうか?

もちろん、そのような関数を実現するために、関数の引き渡しパラメータとして配列を使用することを検討することもできます:

/**
 *计算任意多个数的和,函数参数params必须为array类型
 * @param array params
 */
function sum($params){
  $total = 0;
  foreach ($params as $i){
    $total += $i;
  }
  return $total;
}

まあ、実際にはこのアプローチには何の問題もありません。なぜなら、

変数パラメータが誕生する前のプログラム開発プロセスだからです。

では、任意の数のパラメーターを渡す必要がある場合、それらは配列または他の同様のコレクションによって表されます。しかし、この種の伝達は十分に明確で直感的だと思いませんか? PHP プログラマーは、変数に関する詳細情報を表示するための関数 var_dump() が PHP にあることを知っておく必要があります。たとえば、次のようになります。

$age = 18;
var_dump($age); //显示变量$age的详细信息
複数の変数に関する情報を表示する必要がある場合は、次のように使用することもできます:

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

var_dump() は同時に任意の数の変数を受け取ることができ、配列の形式で渡す必要がないことがわかっています。このパラメーターの受け渡し方法はより直感的で洗練されています。任意の数のパラメーターを渡すこの形式は、変数パラメーターと呼ばれます。もちろん、 sum() 関数は次の方法でも実装できます:

/**
 *计算任意多个数的和,并返回计算后的结果
 */
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

上の例に示すように、現在の関数で PHP

組み込み関数

func_get_args() を使用している限り、いつでもそれを渡すことができます。実際のパラメータ配列の関数を呼び出すと、パラメータ配列を処理するだけで済みます。

注 1:

1. 呼び出し時にパラメータが渡されない場合でも、関数 func_get_args() は配列型を返しますが、それは空の配列です (配列には要素が含まれていません)。 2.func_get_args() は関数内でのみ呼び出すことができ、それ以外の場合は警告メッセージが表示されます。 3. func_get_args() 関数はインデックス パラメータを受け取り、パラメータ配列内の指定されたインデックスにあるパラメータを取得できます。たとえば、渡された最初の引数を取得したい場合は、func_get_args(1) を呼び出します。 4. さらに、関数内で func_num_args() を呼び出すこともでき、現在の関数呼び出しで渡されたパラメーターの数を返すことができます。

注 2

: PHP 変数パラメーターの実装は、JavaScript 変数パラメーターの実装と非常に似ています。PHP は組み込み関数 func_get_args() を使用して実装し、JavaScript は関数 組み込み変数引数を使用します。それを実装するために。

备注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());
}


以上がPHPで変数変数の例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。