【服务端开发】对比Java和PHP的final

177 阅读2分钟

「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」。

终于写到双位数了,第十天你好。

昨天看了掘金直播,张鑫旭大佬介绍写作经验。

印象最深的是大佬讲要有自己的风格,重点提到了开篇碎碎念。我之前也有这个习惯,我比较喜欢把文章和热点时事想结合,这样读起来也不会那么枯燥。

毕竟咱们不是写编程的工具书。

写作的目的一是自己总结,二是分享。

今天这篇仍然以坚持更文为目标,分享服务端开发过程中遇到的问题。

ba2db5c6dfdb74860d7500e36f93b369.jpeg

对比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赋给b,只是把对应的地址给了他,即b,只是把对应的地址给了他,即a、b都存放了对象在堆中的地址,所以b都存放了对象在堆中的地址,所以b->num和$a->num访问的是同一份数据。

unset

$a="hello";
$b= &$a;
unset($b);
$b="world";
echo $a; 

输出结果:

hello

我们可以把变量名想象成一个容器:

image.png

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();

运行结果:

  1. +合并数组,相同的值不会重复追加;

  2. array_merge() 相同的值也会重复追加,且第二个参数直接合并到第一个参数数组的后面。

image.png

最后

感谢大家阅读,欢迎三连。