搜索
首页后端开发php教程 PHP变量标识符的一些守则

PHP变量标识符的一些规则

PHP变量标识符提供了非常特别的方便。但是,相当多的从事多年的PHP程序员却无法清楚它的具体用法,从而出错时,不知哪里错了。所以,现在总结一下。便于大家快速掌握。
PHP变量的运行机制是,将变量标识符$后的字符串,或表达式运算结果的字符串作为变量名,去变量池获取变量值。
可见,PHP相当于提供了一个变量的“名称指针”。它不同于C++的地址指针,因为,不会有空地址的不安全性。也不会有变量内存溢出的问题。所有这些PHP都给我们完成了。
变量标识符:
$:以后面的字符串为变量名,取同名变量。
?? $a='Hello';
?? $$a = 'world';
{}将其中的表达式解析成字串,并取此字串的变量,{}不能单独在表达式外部存在,否则就会当成流程控制而报错。这就是说, {}前必有$,或者外面必有引号。
echo $a, ${$a}; echo $a, $$a;

二者的区别: $总是寻找后面的第一个字串, {}是将内部的表达式解析为字串。PHP正是用这一方式实现了变量的“名称指针”。

${}:由{}返回字串交给$再处理。用途:对于表达式结果取变量。
?如:${$array[$i][$j]} , 如果使用 $$array[$i][$j]} 则PHP会找 $$array这个变量。而不是找$array[$i][$j]为结果的变量名的变量。

{}在函数中与表达式中
猜猜看:下面程序返回什么:

   $a='Hello';
   $$a = 'world';
   echo '1 ', $a, '{$a}', '</br>';
   echo '2 ', $a, "{$a}", '</br>';
   echo '3 ', $a, "{{$a}}", '</br>';   
   echo '4 ', $a, "${$a}", '</br>';   
   echo '5 ', $a, ${$a}, '</br>'; 
   echo '6 ', $a, "{${$a}}", '</br>'; 
   echo '7 ', $a, "{{${$a}}}", '</br>'; 
   echo '8 ', $a, "$$a", '</br>'; 
        echo '9 ', $a, "{a}", '</br>';
        echo '10 ', $a, "${a}", '</br>';

?

结果:

?? echo '1 ', $a, '{$a}', '';
输出是:1 Hello{$a}?

//正常情况下,单引号是非执行字串,按原结果返回。但是:Smarty同样会将其进行解析!!所以, Smarty模板中, ‘{$a}’这样的表达式,仍可能出现的是你不想要的结果!!
假如:str_replace('{$foo} ',$foo, '{$foo}.some');
因为上面的原因:需要改为:
? str_replace(array('{', '$foo',} '),array('',$foo, ''), '{$foo}.some');

?? echo '2 ', $a, "{$a}", '';
输出是: 2 HelloHello
双引号中,无论是否有{},变量总会被解析。
?? echo '3 ', $a, "{{$a}}", '';??
输出是: 3 Hello{Hello}?
//所以,如果要输出带{}的结果,则需要加两层。
?? echo '4 ', $a, "${$a}", '';?
输出是: 4 Helloworld
?? echo '5 ', $a, ${$a}, '';
输出是: 4 Helloworld
// ${$表达式},无论外面是否带双引号,结果都是一样的?

?? echo '6 ', $a, "{${$a}}", '';?
输出是: 6 Helloworld
?? echo '7 ', $a, "{{${$a}}}", '';
输出是: 7 Hello{world}
//要输出带{}的结果,必须多加一层。
echo '8 ', $a, "$$a", '';
输出是: 8 Hello$Hello
//双引号中的$只执行一次。所以,结果就不是你所要的。

附注:{}还可用于数组,即对数组下标访问。即
$array[$i][$j] 与 $array{$i}{$j}是等价的。但正常,由于PHP文档中给出是的[]。而字符串是字节数组,所以,我们只有在用字节数组模式访问字符串时,才使用{}
$a='ux:Cache'; $a{2}=''; echo $a; 这个结果是什么,你知道吗?
echo '9 ', $a, "{a}", '';
输出是:9 Hello{a}
?? echo '10 ', $a, "${a}", '';
输出是:10 HelloHello可以见到, {}外有$, {}也会将结果送给$解析。

总结:
双引号中的$只会解析一次。不会进行多重解析。echo “$$a”,则要改为 echo “${$a}”;
{}遇$成为{$foo}就会被解析。要输出带{}的结果,则要{{$foo}}
$是向后寻找字符串,所以,数组或表达式的结果: 不能
$$array[$i][$j] 而是要 ${$array[$i][$j]}

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
五个精选的Go语言开源项目,带你探索技术世界五个精选的Go语言开源项目,带你探索技术世界Jan 30, 2024 am 09:08 AM

在当今科技快速发展的时代,编程语言也如雨后春笋般涌现出来。其中一门备受瞩目的语言就是Go语言,它以其简洁、高效、并发安全等特性受到了许多开发者的喜爱。Go语言以其强大的生态系统而著称,其中有许多优秀的开源项目。本文将介绍五个精选的Go语言开源项目,带领读者一起探索Go语言开源项目的世界。KubernetesKubernetes是一个开源的容器编排引擎,用于自

Go语言开发必备:5个热门框架推荐Go语言开发必备:5个热门框架推荐Mar 24, 2024 pm 01:15 PM

《Go语言开发必备:5个热门框架推荐》Go语言作为一门快速、高效的编程语言,受到越来越多开发者的青睐。为了提高开发效率,优化代码结构,很多开发者选择使用框架来快速搭建应用。在Go语言的世界中,有许多优秀的框架可供选择。本文将介绍5个热门的Go语言框架,并提供具体的代码示例,帮助读者更好地理解和使用这些框架。1.GinGin是一个轻量级的Web框架,拥有快速

使用C#中的Array.Sort函数对数组进行排序使用C#中的Array.Sort函数对数组进行排序Nov 18, 2023 am 10:37 AM

标题:C#中使用Array.Sort函数对数组进行排序的示例正文:在C#中,数组是一种常用的数据结构,经常需要对数组进行排序操作。C#提供了Array类,其中有Sort方法可以方便地对数组进行排序。本文将演示如何使用C#中的Array.Sort函数对数组进行排序,并提供具体的代码示例。首先,我们需要了解一下Array.Sort函数的基本用法。Array.So

使用Golang的Web框架Echo框架实现分布式任务调度使用Golang的Web框架Echo框架实现分布式任务调度Jun 24, 2023 am 11:49 AM

随着互联网的发展和信息技术的进步,大数据时代已经来临,数据分析、机器学习等领域也得到了广泛的应用。在这些领域中,任务调度是一个不可避免的问题。如何实现高效的任务调度,对于提高效率至关重要。在本篇文章中,将介绍如何使用Golang的Web框架Echo框架实现分布式任务调度。一、介绍Echo框架Echo是一个高性能、可伸缩、轻量级的GoWeb框架。它基于HTT

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code<form name="myform"

Laravel开发:如何使用Laravel Echo和Pusher实现WebSockets通信?Laravel开发:如何使用Laravel Echo和Pusher实现WebSockets通信?Jun 13, 2023 pm 05:01 PM

Laravel是一个流行的PHP框架,具有高度可扩展性和高效性,它提供了很多强大的工具和库,让开发者可以快速构建高质量的Web应用程序。其中,LaravelEcho和Pusher是两个非常重要的工具,通过它们可以很容易地实现WebSockets通信,本文将详细介绍如何在Laravel应用程序中使用这两个工具。什么是WebSockets?WebSockets

简单明了的PHP array_merge_recursive()函数使用方法简单明了的PHP array_merge_recursive()函数使用方法Jun 27, 2023 pm 01:48 PM

在进行PHP编程时,我们常常需要对数组进行合并。PHP提供了array_merge()函数来完成数组合并的工作,不过当数组中存在相同的键时,该函数会覆盖原有的值。为了解决这个问题,PHP在语言中还提供了一个array_merge_recursive()函数,该函数可以合并数组并保留相同键的值,使得程序的设计变得更加灵活。array_merge

探索Go语言框架:5个不容错过的选择!探索Go语言框架:5个不容错过的选择!Feb 19, 2024 pm 02:29 PM

Go语言作为一种快速、高效的编程语言,一直受到程序员的青睐。在Go语言的生态系统中,框架扮演着至关重要的角色,帮助开发者更快速地构建应用程序。本文将介绍五个Go语言框架,让你了解其特点和用法。1.Gin框架Gin框架是一个轻量级的Web框架,具有快速、高性能的特点。使用Gin框架可以快速构建RESTfulAPI和Web应用程序。以下是一个简单的示例代码:

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)