php可变变量的用法,PHP的可变变量与可变函数

什么叫可变。在程序世界中,可变的当然是变量。常量在定义之后都是不可变的,在程序执行过程中,这个常量都是不能修改的。但是变量却不同,它们可以修改。那么可变变量和可变函数又是什么意思呢?很明显,就是用另一个变量来定义他们,这个变量是可变的呀!

可变变量

$a = 'hello';

$$a = 'world';

echo $a, ' ', $hello;

咦,我们没有定义\

math?formula=hello%E8%BF%99%E4%B8%AA%E5%8F%98%E9%87%8F%E5%91%80%E3%80%82%E5%97%AF%EF%BC%8C%E4%BB%8E%E8%A1%A8%E9%9D%A2%E4%B8%8A%E7%9C%8B%E6%88%91%E4%BB%AC%E7%A1%AE%E5%AE%9E%E6%B2%A1%E6%9C%89%E5%AE%9A%E4%B9%89%E8%BF%99%E4%B8%AA%E5%8F%98%E9%87%8F%EF%BC%8C%E4%BD%86%E8%AF%B7%E6%B3%A8%E6%84%8F%E8%BF%99%E4%B8%AA%24%24%E7%AC%A6%E5%8F%B7%E3%80%82符号的意思就是定义变量,当我们在一个

math?formula=%E7%AC%A6%E5%8F%B7%E5%90%8E%E9%9D%A2%E8%B7%9F%E4%B8%8A%E4%B8%80%E4%B8%AA%E5%B7%B2%E7%BB%8F%E5%AE%9A%E4%B9%89%E7%9A%84%E5%8F%98%E9%87%8F%E5%90%8D%EF%BC%8C%E9%82%A3%E4%B9%88%E8%BF%99%E4%B8%AA%E5%8F%98%E9%87%8F%E7%9A%84%E5%86%85%E5%AE%B9%E5%B0%B1%E6%88%90%E4%B8%BA%E4%BA%86%E6%96%B0%E7%9A%84%E5%8F%98%E9%87%8F%E5%90%8D%E3%80%82%E4%B9%9F%E5%B0%B1%E6%98%AF%E8%AF%B4%EF%BC%8Ca的内容hello成为了一个新的变量名叫$hello,然后给它赋值为world。是不是感觉不太好理解,也不便于我们查看代码,这个问题我们最后再说。

当然,以下的用法要注意:

$a = 1;

$$a = 2;

echo $1; // Parse error: syntax error, unexpected '1'

echo ${1}; // ok

$a = ['b', 'c', 'd'];

$$a = 'f';

echo $b, $c, $d;

数字类型不是合法的变量名,不能作为可变变量被定义

但是利用{},是可以输出的,{}会获取{}内部的值并作为一个变量来解析,这里的{1}我们利用可变变量赋值成为了一个变量,直接输出是非常的,但放在{1}中就成为了一个可解析的变量名,我们可以简单的理解为{1}转换成了$'1',成为了一个正式的变量名

数组当然是不行啦

它们这样写都是不会报错的

使用对象就不行了,直接就会报错了,对象是不能进行可变变量的操作的。

class A {}

class B extends A {}

$a = new A();

$$a = new B(); // Catchable fatal error: Object of class A could not be converted to string

可变函数

可变函数其实也大同小异,当我们在一个变量的后面加上()时,PHP就会尝试将这个变量当做函数来解析。

function testA()

{

echo "testA";

}

$a = 'testA';

$a(); // testA

可变变量是将一个字符串转换成了一个变量名,而可变函数则是将一个字符串当做函数名来调用。比如类中的方法,我们可以这样来调用:

class C

{

public function testA()

{

echo "C:testA";

}

public function testB()

{

echo "C:testB";

}

public function testC()

{

echo "C:testC";

}

}

$funcs = ['testA', 'testB', 'testC'];

$c = new C();

foreach ($funcs as $func) {

$c->$func();

}

可变函数的这种特性和另外两个系统函数的关系非常紧密,它们是:call_user_func()和call_user_func_array(),Laravel中服务容器的核心实现就是使用了call_user_func_array()来实现依赖注入与控制反转的,这个等我们将来学习到的时候再说。

总结

看似很美好很灵活的可变变量与可变函数在我们实际的开发中却很少使用。究其原因当然是可读性不好,代码不仅是写给机器的,也是写给人看的,团队中人员的水平不齐的话过多的使用这两种特性会产生非常多的混乱情况。但是,很多框架代码中会使用这些特性,所以,这也是我们向更高层次迈进所必须要掌握的东西。不管怎么样,学就是了,能在业务场合中使用可变变量或者函数大大节约代码量写出精致易读的代码更能彰显我们的技术实力。

各自媒体平台均可搜索【硬核项目经理】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值