下载鸥 > 网站下载 > 开发教程 > PHP

PHP可变变量

617 2020-11-13 17:50:11

收藏

简述

加一个$符号,就是可变变量。

“可变变量”这一概念是 PHP 的特色语法,在其它的编程语言中一般没这种骚操作……

通俗的说,可变变量就是“变量的变量”,也就是一个变量下的变量。


可变变量的使用

要定义一个可变变量很简单,只需在一般的变量前面再加上一个美元符号"$"

<?php  
    $hello= '你好';  
    $a= 'hello';  
    echo $$a;  
?>

运行上面的代码,输出的是 “你好”。为什么会输出 “你好” 呢,我们来逐句解析。
 

第一句定义了一个普通的变量 $hello ,值为 “你好”;


第二句也定义了一个普通变脸 $a ,值为 “hello”;

  
第三句就用上了可变变量 $$a ,因为之前定义的 $a 的值为 “hello”,所以 $$a 就相当于 $hello,所以最终输出了 “你好”……

让我们再来看下一个例子……

<?php  
    $a= 'hello';  
    $$a= 'world';  
    echo"$a ${$a}";  
?>

以上代码中,$a 的内容是 “hello”,$$a 的内容是 “word”。同时,因为 $$a 是一个可变变量,所以它等效于 $hello。因此上述代码也可以写成

<?php  
    $a= 'hello';  
    $$a= 'world';  
    echo"$a $hello";  
?>

它们输出的内容都是 “hello world”

可变变量与数组

要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。

解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]。

可变变量与类

类的属性也可以通过可变属性名来访问。可变属性名将在该调用所处的范围内被解析。例如,对于 $foo->$bar 表达式,则会在本地范围来解析 $bar 并且其值将被用于 $foo 的属性名。对于 $bar 是数组单元时也是一样。

也可使用花括号来给属性名清晰定界。最有用是在属性位于数组中,或者属性名包含有多个部分或者属性名包含有非法字符时(例如来自 json_decode() 或 SimpleXML)。

<?php  
// 可变属性示例
classfoo {  
    var $bar= 'I am bar.';  
    var $arr= array('I am A.', 'I am B.', 'I am C.');  
    var $r= 'I am r.';  
}  
$foo= newfoo();  
$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";  
?>

玩坏了的可变变量

在一个普通的变量前边加一个 “$” 它就变成了可变变量,那么要是在可变变量的前面再加一个 “$” 呢?再加两个,加 N 个呢? 统统没问题……

<?php  
    $Bar= "a";  
    $Foo= "Bar";  
    $World= "Foo";  
    $Hello= "World";  
    $a= "Hello";  
    $a; // = Hello
    $$a; // => $Hello = World
    $$$a; // => $$Hello => $World = Foo
    $$$$a; // => $$$Hello => $$World = $Foo = Bar
    $$$$$a; // => $$$$Hello => $$$World = $$Foo = $Bar = a
    // 以下相当于进入了循环...
    $$$$$$a; // = Hello
    $$$$$$$a; // = World
    // 只要你愿意,你可以在前面加无数个美元符……
    
    $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$a;  
    // Ps:据说搞 PHP 开发的都不差钱,因为有很多的 $ ... ...
?>

 

本文地址:https://xzo.com.cn/develop/php/443.html

有帮助,很赞!

信息来源:精准像素
导出教程 下载word版教程
发表评论 共有条评论
关于PHP

PHP是一种服务器端、跨平台、html嵌入式的脚本语言,其功能十分强大、入门简单。在过去,民间一直有说法称“PHP是最好的编程语言”,是PHP开发者对自身所使用语言的肯定。

PHP曾是最主流的网站web开发语言之一,现在也依然十分流行。

推荐PHP开发教程
php怎样开发一个访问密码的界面防止资源被爬取?
php怎样开发一个访问密码的界面防止资源被爬取?

互联网上每天都有很多爬虫到处爬取内容,你可能不知道他们是干嘛的,但其中肯定...

1 388
当缓存文件大于4KB,不能用cookie时的替代方案就是session
当缓存文件大于4KB,不能用cookie时的替代方案就是session

鸥哥最近在开发一个项目,出于对用户隐私的保护,数据一概不能存储到数据表,而是...

1 433
php简单的数组介绍与应用
php简单的数组介绍与应用

数组在实际开发过程中运用非常频繁,通过合理运用数组,我们可以顺利实现各种数...

1 372
php常用基础函数isset()介绍
php常用基础函数isset()介绍

isset() 函数用于检测变量是否已设置并且非 NULL。如果已经使用 unset() 释...

0 381
什么是高并发,与CPU,内存,分布式有什么关系
什么是高并发,与CPU,内存,分布式有什么关系

我们在网站开发的过程中经常会接触到高并发这个概念,但高并发到底是什么,具体...

1 384
php正则提取字符串中的数字并打印输出
php正则提取字符串中的数字并打印输出

我们在网站开发的过程中经常需要处理数据,今天讲讲怎样用正则提取字符串中的...

0 402
PHP的for循环为什么只执行了一次就停止了?
PHP的for循环为什么只执行了一次就停止了?

今天有朋友咨询鸥哥,说php写的for循环本来至少要循环9次,但却只执行了一次就...

1 417
简单的php高并发处理方案分享
简单的php高并发处理方案分享

很多互联网公司对并发要求比较高,如果完全依赖服务器性能的提升,则可能会面临...

0 389
推荐插件
帝国cms百度文字识别ocr接口对接插件
帝国cms百度文字识别ocr接口对接插件

许多网站会做一些小功能小插件给客户使用以增强用户黏性,比如图片转文字,这种...

0 454
帝国cms百度AI图像清晰度增强api接口对接插件
帝国cms百度AI图像清晰度增强api接口对接插件

通过本插件,可以实现帝国cms网站对接百度云api实现图像清晰度增强的功能。经...

0 514
帝国cms联想词搜索高级搜索插件下载
帝国cms联想词搜索高级搜索插件下载

帝国CMS自带的搜索功能虽然强大,但也有很强的局限性 -- 必须关键词完全匹配...

0 723
帝国cms自动给正文关键词添加tag内链
帝国cms自动给正文关键词添加tag内链

帝国cms有自带的给关键词添加内链功能,但需要手动添加关键词,容易出现疏漏和...

0 825
帝国cms在线考试系统模板插件
帝国cms在线考试系统模板插件

一直没看到好用的帝国cms在线考试插件,所以自己开发了一款。在线考试插件用...

0 1271
帝国cms百度AI黑白图像上色api接口对接插件
帝国cms百度AI黑白图像上色api接口对接插件

百度开放了系列AI功能api如图像上色、图像去雾、图像修复、无损放大、清晰...

0 420
帝国cms访问统计ip地址链接与封禁插件下载
帝国cms访问统计ip地址链接与封禁插件下载

下载鸥开发了这款帝国cms封禁ip插件,自动记录访问情况,让我们可以更快的识别...

0 1000
帝国cms多栏目多数据表自动审核推送插件
帝国cms多栏目多数据表自动审核推送插件

本插件基于帝国cms帝国cms每日自动审核插件,在自动审核指定条数信息的基础上...

0 909
客服QQ:341553759
扫码咨询 常见问题 >
官方交流群:90432500
点击加入