当前位置: 首页 > 后端技术 > PHP

PHP的可变变量和可变函数

时间:2023-03-29 16:13:49 PHP

什么是变量。在程序世界中,可变的当然是变量。常量在定义后是不可变的,在程序执行期间不能修改。但是变量不同,是可以修改的。那么可变变量和可变函数是什么意思呢?很明显,是用另一个变量来定义它们的,而这个变量就是变量!变量变量$a='你好';$$a='世界';echo$a,'',$你好;嘿,我们没有定义变量\$hello。好吧,看起来我们没有定义这个变量,但请注意$$符号。$符号表示定义一个变量。当我们在$符号后跟一个已定义的变量名时,变量的内容成为新的变量名。也就是说$a的内容hello变成了一个新的变量$hello,然后给它赋值world。是不是不好理解,不方便我们查看代码,这个问题我们最后再说。当然要注意下面的用法:$a=1;$$a=2;echo$1;//解析错误:语法错误,意外的'1'echo${1};//好的$a=['b','c','d'];$$a='f';echo$b,$c,$d;number类型不是合法的变量名,不能定义为可变变量,但可以用{}输出,{}会获取{}里面的值,解析为变量。这里{1}我们使用variable变量赋值,成为一个变量。直接输出很容易,但是变成了一个可解析的变量名,我们可以简单的理解为{1}转换成$'1',就变成了一个形式化的变量名数组。如果是,则直接报错,对象不能进行可变变量操作。A类{}B类扩展A{}$a=newA();$$a=newB();//Catchablefatalerror:ObjectofclassAcouldnotbeconvertedtostringmutablefunctionmutablefunctionactually类似的,当我们在一个变量后面加上()时,PHP会尝试将该变量解析为一个函数。函数testA(){echo"testA";}$a='testA';$a();//testA变量variable将字符串转换为变量名,而变量function将字符转换为函数名调用。比如类中的一个方法,我们可以这样调用:classC{publicfunctiontestA(){echo"C:testA";}publicfunctiontestB(){echo"C:testB";}publicfunctiontestC(){echo"C:testC";}}$funcs=['testA','testB','testC'];$c=newC();foreach($funcsas$func){$c->$func();}这个特性变量函数与另外两个系统函数关系非常密切,它们是:call_user_func()和call_user_func_array(),Laravel中服务容器的核心实现是使用call_user_func_array()来实现依赖注入和控制倒置,这将是以后学习的时候讨论。总结看似漂亮灵活的可变变量和可变函数,在我们实际开发中却很少用到。原因当然是可读性不好。代码不仅是写给机器看的,也是给人看的。如果团队成员的水平不统一,过多地使用这两个特性会造成很多混乱。但是这些特性在很多框架代码中都会用到,所以这是我们必须掌握才能更上一层楼的。无论如何,只要学习它。能够在业务场景中使用可变变量或者函数,可以大大节省代码量,写出精美易读的代码,更好地展示我们的技术实力。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/PHP%E7%9A%84%E5%8F%AF%E5%8F%98%E5%8F%98%E9%87%8F%E4%B8%8E%E5%8F%AF%E5%8F%98%E5%87%BD%E6%95%B0.php参考链接:https://www.php.net/manual/zh/language.variables.variable.phphttps://www.php.net/manual/zh/functions.variable-functions.php各媒体平台均可搜索【硬核项目经理】