对比Java和PHP的final
final---用于类、方法前。
final类---不可被继承。
final方法---不可被覆盖。
注意:php中不能用final不能修饰属性。php和Java不同,Java中类属性是可以用final修饰表示的是常量;PHP不能,因为PHP的常量只能用define或者const定义。
单引号和双引号的区别
PHP中,单引号和双引号所包围的字符串有什么区别呢?
双引号包裹的$变量会被解析,而单引号不解析;
因为双引号包裹的内容要检查是否包括变量,所以读取双引号的速度比单引号要慢。
堆 栈
<?php class A{ public $num=100; } $a = new A(); $b = $a; $a->num=200; echo $b->num; ?>
输出结果
200
分析:在PHP中,基本类型变量放在栈中,对象、数组放在堆中,对象中真正的内容是存在堆中。
a只是存放了该对象在堆中的地址,将a只是存放了该对象在堆中的地址,将a只是存放了该对象在堆中的地址,将a赋给b,只是把对应的地址给了他,即b,只是把对应的地址给了他,即b,只是把对应的地址给了他,即a、b都存放了对象在堆中的地址,所以b都存放了对象在堆中的地址,所以b都存放了对象在堆中的地址,所以b->num和$a->num访问的是同一份数据。
unset
$a="hello"; $b= &$a; unset($b); $b="world"; echo $a;
输出结果:
hello
我们可以把变量名想象成一个容器:
unset相当于把这个标签名给撕了,但是只要这个盒子还有标签名贴着,那就不会被PHP的垃圾回收机制给回收掉!
所以除非把所有标签给撕了,或者直接把容器里面的东西给拿出来,那么就成了空==>NULL了
合并数组
PHP中array_merge()和+的区别
测试代码:
$a = ['a', 'b', 'c']; $b = ['a', 'b']; $r1 = $a + $b; $r2 = array_merge($a, $b); echo "+结果:"; var_dump($r1); echo "array_merge结果:"; var_dump($r2); exit();
运行结果:
- +合并数组,相同的值不会重复追加;
- array_merge() 相同的值也会重复追加,且第二个参数直接合并到第一个参数数组的后面。