从入门到放弃?一份让PHP学习持续正反馈的知识清单
一、引用变量的考察点
引用变量的本质是 多个变量名指向同一内存地址 ,而非拷贝数据,核心考察点围绕其定义、使用场景及特殊行为展开。
1、基础定义与语法
引用符号 :通过 & 符号声明引用,需区分 “声明引用” 和 “传递引用” 两种场景。
禁止重复引用 :同一变量不能重复声明为其他变量的引用,否则会触发 Notice 警告(如 $a = &$b; $a = &$c; 不合法)。
2、PHP引用变量的原理 #技术分享
PHP 内部通过两个关键结构实现变量管理:
符号表(Symbol Table) :存储变量名及其对应的「指针」(指向内存块的引用)。内存块(Zval Container) :存储变量的实际值,以及一个「引用计数(refcount)」属性。
引用变量的本质 :让多个变量名在符号表中指向同一个内存块,此时内存块的 refcount 会增加(记录有多少个变量引用它)。
$name = 'stark张宇';
xdebug_debug_zval('name');
$nick = &$name;
xdebug_debug_zval('name');
3、引用与普通赋值的底层区别
普通赋值(值拷贝)
当执行 $b = $a 时:
引用赋值(共享内存)
当执行 $b = &$a 时:
4.引用计数(refcount)的作用
内存块的 refcount 属性用于跟踪引用它的变量数量,是 PHP 垃圾回收的核心依据:
$a = 10;
$b = &$a;
unset($b);
unset($a);
5.特殊场景:对象的「隐式引用」
PHP 中对象的赋值行为与普通变量不同:
class Person{
public $name = 'stark张宇';
}
$person = new Person();
xdebug_debug_zval('person');
$person2 = $person;
xdebug_debug_zval('person'); $person2->name = '畅宝';
xdebug_debug_zval('person');
PHP 引用变量的工作原理可概括为:通过符号表让多个变量名绑定到同一内存块,并通过引用计数管理内存生命周期 。这种机制避免了数据的冗余拷贝,既能节省内存,又能实现变量间的同步修改,但需注意与对象默认引用行为的区别。
$data = str_repeat('测试写时复制机制', 10000);
var_dump(memory_get_usage());
$copy = $data; var_dump(memory_get_usage());
$copy = str_repeat('修改后的数据', 10000); var_dump(memory_get_usage());
二、常量及数据类型考点1、帮我整理PHP字符串的定义方式及各自区别
在 PHP 中,字符串的定义方式主要有四种,每种方式有其独特的语法和使用场景,下面为你详细整理:
1.1 单引号字符串(' '),使用单引号包裹字符串内容
$name = "PHP";
echo 'Hello $name';
echo 'It's a test'; // 输出:It's a test
1.2. 双引号字符串(" "),使用双引号包裹字符串内容
$name = "PHP";
echo "Hello $name";
echo "Line 1\nLine 2";
1.3 heredoc 语法(