欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP变量解析

程序员文章站 2022-05-28 12:22:04
...
        当字符串使用双引号或heredoc语法结构定义时,其中的变量会被解析。变量的解析有两种语法规则:简单规则、复杂规则。

        简单规则

        当PHP解析器遇到美元符号“$”时,会组合尽可能多的字符以形成一个合法的变量名,同时数组索引、对象属性也可以被解析。
<?php
@header("Content-type: text/html; charset=utf-8"); 
$number="1";
$numbers="1,2";
$nums=array(1,2,3);
echo "$numbers\n";
echo "$nums[1]\n";
class Test{
	public $test="value";
}
$t=new Test;
echo "$t->test\n";
?>

        复杂规则

        复杂规则指的不是规则复杂,而是可以使用复杂的表达式,任何具有String类型的变量、数组、对象属性都可以使用此语法,只需要简单的像在String以外的地方写出表达式,然后将表达式用“{}”包围起来即可。因为{}无法被转义,所以只有“$”和“{”紧挨着的时候才会被识别,可以用{\$来表示{$。函数、方法、静态类变量和类常量只有在 PHP 5 以后才可在 {$} 中使用。然而,只有在该字符串被定义的命名空间中才可以将其值作为变量名来访问。只单一使用花括号 ({}) 无法处理从函数或方法的返回值或者类常量以及类静态变量的值。
<?php
@header("Content-type: text/html; charset=utf-8"); 
$varname="number";
$number="1";
$numbers="1,2";
$nums=array(1,2,"2"=>3);
class Test{
	public $test="value";
	function foo(){
		return "numbers";
	}
}
$t=new Test;

$test="value";
//{和$之间不能有空格
echo "This is {$test}\n";
echo "This is ${test}\n";

// 有效,只有通过花括号语法才能正确解析带引号的键名
echo "The 3td number is: {$nums['2']}\n";
echo "The 3td number is: {$nums[1]}\n";
function foo(){
	return "number";
}
$names=array('test','numbers','nums');

//输出名字为foo函数返回值的变量的值
echo "${foo()}\n";
//输出名字为Test对象foo函数返回值的变量的值
echo "${$t->foo()}\n";
//输出名字为变量varname值的变量的值
echo "${$varname}\n";
//输出Test对象中名字没names中第一个元素的属性的值
echo "{$t->{$names[0]}}\n";
?>