Карта знаний PHP — clef:latest: 5 прогонов

тепловая карта: клетка = доля верных ответов по прогонам (0% красная → 100% зелёная, число внутри — % верных); пунктир — нестабильная клетка (флип: ответы прогонов не совпали); протокол клетки как в одиночной карте.

Прогонов: 5
Средняя точность: 63.8% (разброс 153–153 из 240)
Семейства: PHP 92.7% · PHP+версии 91.1% · Symfony 96.9% · Symfony+версии 87.5% · БД и ORM 79.2% · Архитектура 81.2% · Фронтенд 81.2% · HTTP 87.5% · Безопасность 87.5% · Тесты 100.0% · Глубина 83.9% · Всего 87.9%
Токены по всем прогонам: 151460 вх / 0 вых
Флипующих клеток: 0 / 240
Разобрано JSON: 0.0% (не-JSON: 1480 из 1480)
Стабильность = доля клеток, где все прогоны ответили одинаково; флип (ответы расходятся) — знание под вопросом

Тепловая карта

0% верных 50% 100% флип (ответы прогонов расходятся)
L1
L2
L3
L4
L5
L6
L7
L8
L9
L10
итог
语法与运算符
100
T01-L1 · 语法与运算符
双引号字符串和单引号字符串的处理方式完全相同,区别只在速度。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T01-L2 · 语法与运算符
?? 运算符按 isset 的语义工作,对未定义的变量不会产生任何警告。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T01-L3 · 语法与运算符
下面代码输出什么:echo 'a', 'b';
Верный ответ: ab
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T01-L4 · 语法与运算符
print 返回值 1,可以用在表达式内部。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T01-L5 · 语法与运算符
如果左侧操作数为假,?: 运算符(Elvis 运算符)返回左侧操作数。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T01-L6 · 语法与运算符
在 PHP 8 中,连接运算符(.)的优先级低于加法和减法。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T01-L7 · 语法与运算符
表达式 2 ** 3 ** 2 在 PHP 中按 (2 ** 3) ** 2 计算,即等于 64。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T01-L8 · 语法与运算符
下面代码输出什么字符串:echo '总和: ' . 2 + 3;(PHP 8)?
Верный ответ: 总和: 5
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T01-L9-mc · 语法与运算符
这段代码会输出什么? ```php echo intdiv(7, 2) . intdiv(-7, 2); ```
Верный ответ: 3-3
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T01-L10-mc · 语法与运算符
这段代码会输出什么? ```php echo -3 ** 2; ```
Верный ответ: -9
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
58.3%
类型与比较
100
T02-L1 · 类型与比较
在严格比较(===)下,数组被视为相等,与元素顺序无关。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T02-L2 · 类型与比较
表达式 0 == false 返回 false,因为这是严格比较。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T02-L3 · 类型与比较
在 PHP 8 中,表达式 "abc" == 0 的结果是 true。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T02-L4 · 类型与比较
在宽松比较下,null 同时等于 0、空字符串和 false。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T02-L5 · 类型与比较
表达式 (int) '42abc' 返回什么?
Верный ответ: 42
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T02-L6 · 类型与比较
表达式 '5' + 5 返回什么?
Верный ответ: 10
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T02-L7 · 类型与比较
转换为字符串时,false 会变成 "0"。
Верный ответ: 否
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T02-L8 · 类型与比较
表达式 0.1 + 0.2 === 0.3 的结果是 false。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T02-L9-mc · 类型与比较
这段代码会输出什么? ```php echo '1e1' == '10' ? 'true' : 'false'; ```
Верный ответ: true
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T02-L10-mc · 类型与比较
这段代码会输出什么? ```php switch ('a') { case 0: echo 'zero'; break; default: echo 'other'; } ```
Верный ответ: other
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
66.7%
字符串
100
T03-L1 · 字符串
strrev() 能正确反转 UTF-8 字符串。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T03-L2 · 字符串
str_contains('Hello world', 'world') 返回 true。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T03-L3 · 字符串
str_pad() 只能在字符串右侧补齐。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T03-L4 · 字符串
默认情况下 trim() 只去掉空格,不会处理制表符和换行符。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T03-L5 · 字符串
对 UTF-8 字符串,strlen('你好') 返回多少个字节(BYTES)?
Верный ответ: 6
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T03-L6 · 字符串
表达式 substr('abcdef', -3) 返回什么?
Верный ответ: def
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T03-L7 · 字符串
ucfirst() 会原地修改传入的字符串。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T03-L8 · 字符串
heredoc 支持变量插值,而 nowdoc 不支持。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T03-L9-mc · 字符串
这段代码会输出什么? ```php echo strtr('abc', ['a' => '1', 'ab' => '2']); ```
Верный ответ: 2c
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T03-L10-mc · 字符串
这段代码会输出什么? ```php echo '[' . substr('hello', -10) . ']'; ```
Верный ответ: [hello]
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
83.3%
数组
100
T04-L1 · 数组
sort() 函数会保持数组键与值之间的对应关系。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T04-L2 · 数组
数组中的字符串键 '5' 会存成整数 5。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T04-L3 · 数组
in_array() 函数默认使用严格比较(===)。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T04-L4 · 数组
不带回调时,array_filter() 会删除数组中所有“空”(falsy)元素。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T04-L5 · 数组
默认情况下,array_slice() 会保留数组原有的数字键。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T04-L6 · 数组
array_slice([10, 20, 30, 40], 1, 2) 返回什么?
Верный ответ: [20,30]
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T04-L7 · 数组
count(['a' => 1] + ['a' => 9, 'b' => 2]) 的元素个数是多少?
Верный ответ: 2
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T04-L8 · 数组
从 PHP 8.1 起,展开运算符 [...$a, ...$b] 支持带字符串键的数组。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T04-L9-mc · 数组
这段代码会输出什么? ```php $a = ['k' => 1, 'n' => 2]; $b = ['k' => 9, 'm' => 3]; echo implode(',', array_keys($a + $b)); ```
Верный ответ: k,n,m
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T04-L10-mc · 数组
这段代码会输出什么? ```php $a = [[1, 'x', 2], [2, 'y', 1], [3, 'z', 2]]; usort($a, fn($p, $q) => $p[2] <=> $q[2]); echo implode('', array_column($a, 1)); ```
Верный ответ: yxz
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
83.3%
函数与闭包
0
T05-L1 · 函数与闭包
在同一个调用中,命名参数不能与数组展开 ...$args 组合使用。
Верный ответ: 否
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
0
T05-L2 · 函数与闭包
不使用 use 的匿名函数能看到外部作用域的变量。
Верный ответ: 否
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
0
T05-L3 · 函数与闭包
调用 f(1, 2, 3) 时,function f($a) { return func_num_args(); } 内部的 func_num_args() 返回什么?
Верный ответ: 3
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T05-L4 · 函数与闭包
箭头函数 fn 的函数体可以是用花括号包起来的多个表达式。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T05-L5 · 函数与闭包
箭头函数 fn 按引用捕获外部变量(惰性地,在使用时才取值)。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T05-L6 · 函数与闭包
用 static function () {} 声明的闭包不会捕获 $this。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T05-L7 · 函数与闭包
下面代码输出什么:$x = 5; $f = function () use ($x) { return $x; }; $x = 7; echo $f();
Верный ответ: 5
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T05-L8 · 函数与闭包
在弱类型模式(不用 strict_types)下,把字符串 "5" 传给 int 类型的参数是允许的。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T05-L9-mc · 函数与闭包
这段代码会输出什么? ```php class P { private int $v = 3; public function g(): int { return $this->v; } } $p = new P; $f = $p->g(...); $p = null; echo $f(); ```
Верный ответ: 3
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T05-L10-mc · 函数与闭包
这段代码会输出什么? ```php function f(int $a, int $b): int { return $a - $b; } echo f(...['b' => 1, 'a' => 5]); ```
Верный ответ: 4
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
58.3%
OOP:类与继承
100
T06-L1 · OOP:类与继承
PHP 支持构造函数属性提升(promotion):public function __construct(private int $x) {}。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T06-L2 · OOP:类与继承
哪个关键字禁止在子类中重写方法?
Верный ответ: final
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T06-L3 · OOP:类与继承
声明为 final 的方法不能在子类中重写。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T06-L4 · OOP:类与继承
父类中 private 可见性的属性在子类中可以访问。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T06-L5 · OOP:类与继承
get_class(new class {}) 返回什么?请回答 NUL 字节之前的部分(不含文件路径)。
Верный ответ: class@anonymous
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T06-L6 · OOP:类与继承
父类的 private 方法不属于继承契约:子类可以用任意可见性声明同名方法。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T06-L7 · OOP:类与继承
魔术方法 __get() 只会在访问不存在的属性时被调用。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T06-L8 · OOP:类与继承
对 readonly 属性重复赋值会抛出什么——Exception 还是 Error?
Верный ответ: error
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T06-L9-mc · OOP:类与继承
这段代码会输出什么? ```php class A { public function who(): string { return static::class; } } class B extends A {} echo (new B)->who(); ```
Верный ответ: b
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T06-L10-mc · OOP:类与继承
这段代码在 PHP 8.5 上会输出什么? ```php class C { public int $x = 0 { set { $this->x = $value * 2; } } } $c = new C; $c->x = 5; echo $c->x; ```
Верный ответ: 10
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
76.9%
接口、trait 与 enum
100
T07-L1 · 接口、trait 与 enum
接口可以声明常量。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T07-L2 · 接口、trait 与 enum
哪个运算符用于检查对象是否为某个类或接口的实例?
Верный ответ: instanceof
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T07-L3 · 接口、trait 与 enum
接口可以声明静态方法。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T07-L4 · 接口、trait 与 enum
instanceof 运算符只检查类的继承:它不考虑接口。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T07-L5 · 接口、trait 与 enum
接口方法可以像 trait 方法一样带有默认实现。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T07-L6 · 接口、trait 与 enum
抽象类中抽象方法的可见性可以是 protected。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T07-L7 · 接口、trait 与 enum
对于 enum Foo { case A; case B; case C; },Foo::cases() 返回多少个元素?
Верный ответ: 3
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T07-L8 · 接口、trait 与 enum
trait 可以声明常量。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T07-L9-mc · 接口、trait 与 enum
这段代码会输出什么? ```php trait TA { public function f(): string { return 'A'; } } trait TB { public function f(): string { return 'B'; } } class TC { use TA, TB { TB::f insteadof TA; TA::f as g; } } echo (new TC)->f() . (new TC)->g(); ```
Верный ответ: ba
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T07-L10-mc · 接口、trait 与 enum
这段代码会输出什么? ```php trait Counter { public static int $n = 0; } class CX { use Counter; } class CY { use Counter; } CX::$n = 1; echo CY::$n; ```
Верный ответ: 0
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
83.3%
异常与错误
100
T08-L1 · 异常与错误
Throwable 接口是 Exception 和 Error 的共同祖先。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T08-L2 · 异常与错误
catch (Exception $e) 块也能捕获 TypeError,因为 TypeError 最终继承自 Exception。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T08-L3 · 异常与错误
@ 运算符也能抑制异常。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T08-L4 · 异常与错误
intdiv(5, 0) 会抛出哪个错误类?
Верный ответ: divisionbyzeroerror
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T08-L5 · 异常与错误
只有当异常被 catch 块捕获时,finally 块才会执行。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T08-L6 · 异常与错误
在 finally 块内抛出的异常对 try 块的结果没有任何影响。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T08-L7 · 异常与错误
表达式 (bool) new Exception('x') 返回什么?
Верный ответ: true
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T08-L8 · 异常与错误
通过 register_shutdown_function() 注册的函数会在调用 exit 时执行。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T08-L9-mc · 异常与错误
这段代码会输出什么? ```php try { try { throw new RuntimeException('first'); } finally { throw new LogicException('second'); } } catch (LogicException $e) { echo $e->getMessage(); } ```
Верный ответ: second
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T08-L10-mc · 异常与错误
这段代码会输出什么? ```php function f(): int { try { return 1; } finally { return 2; } } echo f(); ```
Верный ответ: 2
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
83.3%
命名空间与自动加载
100
T09-L1 · 命名空间与自动加载
use App\Service\Mailer; 这条语句本身就会加载包含该类的文件。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T09-L2 · 命名空间与自动加载
要导入函数(而不是类),use 后面写哪个词:function 还是 const?
Верный ответ: function
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T09-L3 · 命名空间与自动加载
在 PSR-4 映射 «App\ → src/» 下,类 App\Controller\Api\UserController 会放进哪个文件(相对 src/ 的路径)?
Верный ответ: src/controller/api/usercontroller.php
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T09-L4 · 命名空间与自动加载
引入 vendor/autoload.php 会通过 spl_autoload_register() 注册自动加载器。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T09-L5 · 命名空间与自动加载
魔术常量 __NAMESPACE__ 包含当前命名空间的名称。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T09-L6 · 命名空间与自动加载
在 new 中,非限定类名(不带前导 \)会从全局根开始解析。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T09-L7 · 命名空间与自动加载
在 PSR-4 映射 «App\ → src/» 下,类 App\Model\User 位于文件 src/Model/User.php。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T09-L8 · 命名空间与自动加载
use 语句可以写在函数体内——该导入只对这个函数生效。
Верный ответ: 否
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T09-L9-mc · 命名空间与自动加载
这段代码会输出什么? ```php namespace N; use App\Foo as Baz; echo Baz::class . '|' . \Baz::class; ```
Верный ответ: app\foo|baz
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T09-L10-mc · 命名空间与自动加载
这段代码会输出什么? ```php namespace Ns; class Foo {} $c = 'Foo'; echo (class_exists($c) ? 'yes' : 'no') . (class_exists(__NAMESPACE__ . '\\' . $c) ? 'yes' : 'no'); ```
Верный ответ: noyes
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
75.0%
引用与作用域
100
T10-L1 · 引用与作用域
数组在赋值时是复制,而不是按引用传递。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T10-L2 · 引用与作用域
下面代码输出什么:$a = [1, 2]; $b = $a; $b[] = 3; echo count($a);
Верный ответ: 2
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T10-L3 · 引用与作用域
在函数内部,不通过 global、$GLOBALS 或参数传递,就无法访问全局作用域的用户变量。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T10-L4 · 引用与作用域
在函数内 unset($GLOBALS['x']) 只对该函数删除这个全局变量。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T10-L5 · 引用与作用域
下面代码输出什么:function inc(&$x) { $x++; } $n = 5; inc($n); echo $n;
Верный ответ: 6
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T10-L6 · 引用与作用域
按值遍历数组的 foreach 操作的是“活”数组:循环内对数组的修改在同一个遍历过程中可见。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T10-L7 · 引用与作用域
静态属性在每个实例中各自独立:一个对象中的修改对其他对象不可见。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T10-L8 · 引用与作用域
数组可以用布尔值 true 作为键,并且它会以 bool 类型保存。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T10-L9-mc · 引用与作用域
这段代码会输出什么? ```php $a = [1, 2, 3]; foreach ($a as &$v) {} $v = 99; echo implode(',', $a); ```
Верный ответ: 1,2,99
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T10-L10-mc · 引用与作用域
这段代码会输出什么? ```php class A { public function inc(): int { static $n = 0; return ++$n; } } class B extends A {} $a = new A; $b = new B; $a->inc(); $b->inc(); echo $a->inc(); ```
Верный ответ: 3
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
83.3%
生成器、迭代器与 SPL
100
T11-L1 · 生成器、迭代器与 SPL
生成器内部可以使用带值的 return,该值可以通过 $gen->getReturn() 取到。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T11-L2 · 生成器、迭代器与 SPL
已经遍历完的生成器可以通过 rewind() 倒回并重新遍历。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T11-L3 · 生成器、迭代器与 SPL
yield from 语法会把遍历委托给另一个生成器或可迭代对象。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T11-L4 · 生成器、迭代器与 SPL
对于 function g() { yield 1; },get_class(g()) 返回什么?
Верный ответ: generator
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T11-L5 · 生成器、迭代器与 SPL
count(iterator_to_array((function () { yield from [1, 2, 3]; })())) 返回多少个元素?
Верный ответ: 3
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T11-L6 · 生成器、迭代器与 SPL
SplStack 类实现的是 FIFO 队列。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T11-L7 · 生成器、迭代器与 SPL
ArrayIterator 可以包装数组,并通过 Iterator 接口遍历它。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T11-L8 · 生成器、迭代器与 SPL
ArrayObject 类的对象不能用 foreach 遍历。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T11-L9-mc · 生成器、迭代器与 SPL
这段代码会输出什么? ```php function g(): Generator { $x = yield 1; return $x + 1; } $g = g(); $g->send(10); echo $g->getReturn(); ```
Верный ответ: 11
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T11-L10-mc · 生成器、迭代器与 SPL
这段代码会输出什么? ```php function inner(): Generator { yield 1; yield 2; return 'ok'; } function outer(): Generator { $r = yield from inner(); yield $r; } echo implode(',', iterator_to_array(outer())); ```
Верный ответ: ok,2
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
75.0%
配置与安全
100
T12-L1 · 配置与安全
password_hash() 会自动生成盐(salt)——不需要单独传盐。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T12-L2 · 配置与安全
在 PHP 8 中,PASSWORD_DEFAULT 算法是自动加盐的 md5。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T12-L3 · 配置与安全
password_verify('secret', password_hash('secret', PASSWORD_DEFAULT)) 返回什么?
Верный ответ: true
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T12-L4 · 配置与安全
strip_tags() 函数能防 SQL 注入。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T12-L5 · 配置与安全
session_regenerate_id() 函数用于在用户登录时防范会话固定(session fixation)。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T12-L6 · 配置与安全
哪个内置函数返回 SAPI 的名称(例如 cli)?
Верный ответ: php_sapi_name
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T12-L7 · 配置与安全
session_destroy() 删除服务器端的会话数据,但不会删除用户浏览器中的 cookie。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T12-L8 · 配置与安全
不调用 session_start(),$_SESSION 数组也会自动加载会话数据。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T12-L9-mc · 配置与安全
这段代码会输出什么? ```php $hash = password_hash('x', PASSWORD_BCRYPT, ['cost' => 4]); echo password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 4]) ? 'yes' : 'no'; echo password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 5]) ? 'yes' : 'no'; ```
Верный ответ: noyes
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T12-L10-mc · 配置与安全
这段代码在 PHP 8.5 上会输出什么? ```php echo (E_ALL & 2048) === 0 ? 'strict-out' : 'strict-in'; ```
Верный ответ: strict-out
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
83.3%
PHP 8.4–8.5
0
VC-L1 · PHP 8.4–8.5
函数 array_find() 是在哪个 PHP 版本中引入的?
Верный ответ: 8.4
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
VC-L2 · PHP 8.4–8.5
属性钩子(property hooks,直接在属性声明里写 get/set)进入了 PHP 8.4。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
VC-L3 · PHP 8.4–8.5
非对称可见性(public private(set) string $name)出现在 PHP 8.4。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
VC-L4 · PHP 8.4–8.5
属性 #[\NoDiscard] 最早出现在哪个 PHP 版本?请回答版本号。
Верный ответ: 8.5
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
VC-L5 · PHP 8.4–8.5
管道运算符 |> 最早出现在哪个 PHP 版本?请回答版本号。
Верный ответ: 8.5
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
VC-L6 · PHP 8.4–8.5
clone-with 语法 clone($obj, ['x' => 1]) 是在哪个 PHP 版本中出现的?请回答版本号。
Верный ответ: 8.5
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
VC-L7 · PHP 8.4–8.5
函数 array_first() 和 array_last() 是在哪个 PHP 版本中引入的?
Верный ответ: 8.5
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
VC-L8 · PHP 8.4–8.5
截至 2026-11-07,RFC Partial Function Application v2 被接受进入哪个 PHP 版本?请回答版本号。
Верный ответ: 8.6
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
VC-L9-mc · PHP 8.4–8.5
这段代码在 PHP 8.5 上会输出什么? ```php class C { public function hi(): string { return 'hi'; } } echo new C()->hi(); ```
Верный ответ: hi
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
VC-L10-mc · PHP 8.4–8.5
这段代码在 PHP 8.5 上会输出什么? ```php class Heavy { public int $v = 0; } $r = new ReflectionClass(Heavy::class); $o = $r->newLazyGhost(function (Heavy $obj) { $obj->v = 21; }); echo $r->isUninitializedLazyObject($o) ? 'yes' : 'no'; $o->v; echo $r->isUninitializedLazyObject($o) ? 'yes' : 'no'; ```
Верный ответ: yesno
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
50.0%
PHP:8.6+ 与未来
0
VF-L1 · PHP:8.6+ 与未来
截至 2026-11-07,RFC clamp_v2(函数 clamp())在哪个 PHP 版本中实现?请回答版本号。
Верный ответ: 8.6
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
VF-L2 · PHP:8.6+ 与未来
截至 2026-11-07,RFC Context Managers v2 已被 PHP 接受。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
VF-L3 · PHP:8.6+ 与未来
RFC Bound-Erased Generic Types(泛型)已于 2026 年被拒绝。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
VF-L4 · PHP:8.6+ 与未来
截至 2026-11-07,默认启用多线程(ZTS)的 RFC 已在 PHP 中被接受。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
VF-L5 · PHP:8.6+ 与未来
PHP 8.5 仍然没有泛型(参数化类型)。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
VF-L6 · PHP:8.6+ 与未来
截至 2026-11-07,PHP 的最新稳定版本是 8.5,PHP 8.6 尚未发布(GA 为 2026-11-19)。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
VF-L7 · PHP:8.6+ 与未来
PHP 6 分支从未发布:PHP 5.6 之后直接就是 PHP 7.0。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
VF-L8 · PHP:8.6+ 与未来
向核心添加 #[\Deprecated] 属性的 RFC 已被接受。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
77.8%
整洁架构
100
T25-L1 · 整洁架构
整洁架构与洋葱架构的依赖规则:内层对外层一无所知——依赖指向中心。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T25-L2 · 整洁架构
领域实体既不导入 Doctrine 也不导入 Symfony——只用语言本身(最多加标准库)。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T25-L3 · 整洁架构
控制器和 Twig 模板属于业务逻辑层,因为是它们调用用例。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T25-L4 · 整洁架构
洋葱架构的最中心是什么?
Верный ответ: domain model
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T25-L5 · 整洁架构
层边界的破坏可以自动捕获:层间依赖分析器(如 deptrac)会在出现禁止的调用时报错。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T25-L6 · 整洁架构
用例(interactor)可以接受 HTTP 请求或 EntityManager 作为参数——这样更简单。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T25-L7 · 整洁架构
在接口背后隐藏存储机制、并提供聚合/实体集合的组件叫什么?
Верный ответ: repository
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T25-L8 · 整洁架构
在整洁架构中,把 PostgreSQL 换成其他数据库只会影响外层——领域和用例保持不变。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T25-L9-mc · 整洁架构
层:Domain、Application、Infrastructure。deptrac 规则:Application → Domain;Infrastructure → Domain、Application;Domain → 仅 Domain。 对于这个类,deptrac 会报告多少个违规(Violations)? ```php namespace App\Domain; use App\Application\PlaceOrder; use App\Infrastructure\Db; class OrderService { public function __construct( private PlaceOrder $handler, private Db $db, ) {} } ```
Верный ответ: 2
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T25-L10-mc · 整洁架构
层:Domain、Application、Infrastructure。deptrac 规则:Application → Domain;Infrastructure → Domain、Application;Domain → 仅 Domain。 对于这个类,deptrac 会报告多少个违规(Violations)? ```php namespace App\Domain; use App\Application\PlaceOrder; use App\Infrastructure\Db; class BillingService { public function __construct( private PlaceOrder $handler, private Db $db, private \App\Infrastructure\Logger $logger, ) {} } ```
Верный ответ: 3
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
66.7%
DDD
100
T26-L1 · DDD
在 DDD 中,聚合(aggregate)只是数据库表的另一个名字。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T26-L2 · DDD
值对象(Value Object)不可变,按字段值比较,而不是按标识符。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T26-L3 · DDD
聚合的唯一外部入口——所有变更必须经过它——叫什么?
Верный ответ: aggregate root
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T26-L4 · DDD
在 DDD 中,仓储是针对聚合(其根)声明的,而不是针对每个实体。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T26-L5 · DDD
统一语言(ubiquitous language)是开发者和领域专家共享的模型语言。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
0
T26-L6 · DDD
哪种边界内部模型和语言一致,而边界外同样的词对应别的模型?
Верный ответ: bounded context
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T26-L7 · DDD
贫血模型(只有 getter/setter,逻辑全在服务里)是 DDD 推荐的风格。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T26-L8 · DDD
限界上下文意味着每个上下文都有自己的模型:同一个概念在不同上下文中是不同的类。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T26-L9-mc · DDD
这段代码会输出什么? ```php final class Order { private array $items = []; public function add(string $sku): void { $this->items[$sku] = true; } public function count(): int { return count($this->items); } public function remove(string $sku): void { if (count($this->items) === 1) { throw new DomainException('last item'); } unset($this->items[$sku]); } } $o = new Order; $o->add('a'); try { $o->remove('a'); } catch (DomainException) { } echo $o->count(); ```
Верный ответ: 1
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T26-L10-mc · DDD
这段代码会输出什么? ```php final class Money { public function __construct(public readonly int $amount) {} public function add(Money $o): Money { return new self($this->amount + $o->amount); } } $a = new Money(10); $c = $a->add(new Money(5)); echo $a->amount . ',' . $c->amount; ```
Верный ответ: 10,15
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
66.7%
Symfony
100
T13-L1 · Symfony
Symfony 的 DI 容器中的服务默认是惰性创建的——在首次使用时才实例化。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T13-L2 · Symfony
Symfony 的哪条控制台命令会列出所有已注册的路由?
Верный ответ: debug:router
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T13-L3 · Symfony
Symfony 的自动装配(autowiring)需要在 services.yaml 中手动声明每一个服务。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T13-L4 · Symfony
Twig 模板会编译成 PHP 类并在请求之间缓存。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T13-L5 · Symfony
在 Symfony 的 dev 环境中,DI 容器只在被跟踪的文件变化后重建,而不是每个请求都重建。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T13-L6 · Symfony
哪个环境变量决定 Symfony 的活动环境(dev/prod)?
Верный ответ: app_env
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T13-L7 · Symfony
控制器方法可以是 private——Symfony 的路由对类中的任何方法都有效。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T13-L8 · Symfony
事件订阅者(EventSubscriber)总是比监听器(listener)更早收到事件,因为接口赋予它们优先级。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T13-L9-mc · Symfony
这段代码会输出什么? ```php use Symfony\Component\HttpFoundation\Request; $r = Request::create('/demo', 'GET', [], [], [], ['HTTP_X_TOKEN' => 'abc']); echo $r->headers->get('X-Token') === 'abc' ? 'mapped' : 'missing'; ```
Верный ответ: mapped
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T13-L10-mc · Symfony
这段代码会输出什么? ```php use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Contracts\EventDispatcher\Event; $d = new EventDispatcher(); $out = ''; $d->addListener('e', function () use (&$out) { $out .= 'B'; }, 10); $d->addListener('e', function () use (&$out) { $out .= 'A'; }); $d->addListener('e', function () use (&$out) { $out .= 'C'; }, 5); $d->dispatch(new Event(), 'e'); echo $out; ```
Верный ответ: bca
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
83.3%
Symfony:安全与表单
100
T22-L1 · Symfony:安全与表单
在现代 Symfony(6.0+)中,认证基于 authenticator 类(AuthenticatorInterface);旧的 guard 体系已被移除。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T22-L2 · Symfony:安全与表单
Symfony 的哪个属性直接在控制器方法上检查角色/权限(没有它就返回 403)?
Верный ответ: isgranted
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T22-L3 · Symfony:安全与表单
Voter(投票者)是 Symfony 检查对具体对象访问权的机制:isGranted('EDIT', $post)。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T22-L4 · Symfony:安全与表单
在现代 Symfony(7+)中,验证约束用 PHP 属性声明(#[Assert\NotBlank]);不再支持 doctrine 注解。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T22-L5 · Symfony:安全与表单
Symfony 表单的 CSRF 保护默认开启:表单在提交时会校验令牌。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T22-L6 · Symfony:安全与表单
Symfony 的表单验证在服务器端执行,即使客户端(HTML5)检查已经通过。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T22-L7 · Symfony:安全与表单
Symfony maker 的哪条命令会生成表单类(FormType)?
Верный ответ: make:form
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T22-L8 · Symfony:安全与表单
Symfony 以明文形式把用户密码存在会话中。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T22-L9-mc · Symfony:安全与表单
这段代码会输出什么? ```php use Symfony\Component\Validator\Validation; use Symfony\Component\Validator\Constraints as Assert; $v = Validation::createValidator(); echo count($v->validate([''], [new Assert\NotBlank()])); ```
Верный ответ: 0
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T22-L10-mc · Symfony:安全与表单
这段代码会输出什么? ```php use Symfony\Component\Form\Forms; use Symfony\Component\Form\Extension\Core\Type\TextType; $factory = Forms::createFormFactoryBuilder()->getFormFactory(); $form = $factory->create(TextType::class); try { echo $form->isValid() ? 'valid' : 'invalid'; } catch (Throwable $e) { echo get_class($e); } ```
Верный ответ: symfony\component\form\exception\logicexception
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
75.0%
Symfony:配置与服务
100
T23-L1 · Symfony:配置与服务
Symfony 的 bundle 配置放在 config/packages 中——每个 bundle 或主题一个文件。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T23-L2 · Symfony:配置与服务
包含开发默认值的 .env 文件会提交到仓库,而真正的机密放在不提交的 .env.local 中。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
0
T23-L3 · Symfony:配置与服务
Symfony 的哪条命令会列出容器中注册的服务及其别名?
Верный ответ: debug:container
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T23-L4 · Symfony:配置与服务
Symfony 容器允许在运行时修改参数:$container->setParameter() 可以在控制器中使用。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T23-L5 · Symfony:配置与服务
默认情况下,Symfony 的服务是公开的(public: true)——可以直接从容器中获取。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T23-L6 · Symfony:配置与服务
如果 config/packages 里没有配置文件,bundle 就无法工作——每个 bundle 都必须有配置。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T23-L7 · Symfony:配置与服务
环境变量的值可以通过 %env(VAR)% 语法注入 services.yaml。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T23-L8 · Symfony:配置与服务
Symfony 的哪个环境变量会开启调试模式(影响 profiler 和 Twig 调试)?
Верный ответ: app_debug
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T23-L9-mc · Symfony:配置与服务
这段代码会输出什么? ```php use Symfony\Component\DependencyInjection\ContainerBuilder; $c = new ContainerBuilder(); $c->register('a', stdClass::class)->setPublic(true); $c->compile(); echo spl_object_id($c->get('a')) === spl_object_id($c->get('a')) ? 'same' : 'diff'; ```
Верный ответ: same
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T23-L10-mc · Symfony:配置与服务
这段代码会输出什么? ```php use Symfony\Component\DependencyInjection\ContainerBuilder; $c = new ContainerBuilder(); $c->setParameter('name', 'Bob'); $c->setParameter('greeting', 'hi %name%'); $c->setParameter('message', '%greeting%!'); $c->compile(); echo $c->getParameter('message'); ```
Верный ответ: hi bob!
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
75.0%
Symfony:Messenger
100
T16-L1 · Symfony:Messenger
在 Symfony Messenger 中,一条消息只能有一个处理者(handler)。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T16-L2 · Symfony:Messenger
Messenger 的 sync 传输会把消息放进队列交给 worker 处理,和 async 一样。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T16-L3 · Symfony:Messenger
哪条控制台命令会启动处理 Messenger 队列消息的 worker?
Верный ответ: messenger:consume
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T16-L4 · Symfony:Messenger
失败消息的重试策略(retry_strategy)在 Messenger 传输层面配置。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T16-L5 · Symfony:Messenger
默认情况下,Messenger 会把消息序列化为 JSON。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T16-L6 · Symfony:Messenger
Symfony Scheduler 按计划产生消息,并通过 Messenger 发送。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T16-L7 · Symfony:Messenger
哪个内置的 Messenger 传输通过 Doctrine 把消息存到数据库表中?
Верный ответ: doctrine
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T16-L8 · Symfony:Messenger
Messenger 的管道可以用自定义 middleware 扩展,放在内置中间件之前或之后。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T16-L9-mc · Symfony:Messenger
这段代码会输出什么? ```php use Symfony\Component\Messenger\MessageBus; use Symfony\Component\Messenger\Middleware\MiddlewareInterface; use Symfony\Component\Messenger\Middleware\StackInterface; use Symfony\Component\Messenger\Envelope; final class Trace implements MiddlewareInterface { public function __construct(private string $tag) {} public function handle(Envelope $e, StackInterface $stack): Envelope { echo $this->tag; return $stack->next()->handle($e, $stack); } } $bus = new MessageBus([new Trace('M1'), new Trace('M2')]); $bus->dispatch(new Envelope(new stdClass())); ```
Верный ответ: m1m2
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T16-L10-mc · Symfony:Messenger
这段代码会输出什么? ```php use Symfony\Component\Messenger\MessageBus; use Symfony\Component\Messenger\Middleware\HandleMessageMiddleware; use Symfony\Component\Messenger\Handler\HandlersLocator; use Symfony\Component\Messenger\Handler\HandlerDescriptor; use Symfony\Component\Messenger\Envelope; class Ping {} $n = 0; $d1 = new HandlerDescriptor(function (Ping $m) use (&$n) { $n += 1; }, ['alias' => 'h1']); $d2 = new HandlerDescriptor(function (Ping $m) use (&$n) { $n += 10; }, ['alias' => 'h2']); $bus = new MessageBus([ new HandleMessageMiddleware(new HandlersLocator([Ping::class => [$d1, $d2]])), ]); $bus->dispatch(new Envelope(new Ping())); echo $n; ```
Верный ответ: 11
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
83.3%
Symfony:版本
0
T28-L1 · Symfony:版本
Symfony 的主版本每两年发布一次,次版本每六个月一次(5 月和 11 月)。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
0
T28-L2 · Symfony:版本
Symfony 8 要求的最低 PHP 版本是多少?
Верный ответ: 8.4
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T28-L3 · Symfony:版本
Symfony 7.0 保留了对文档块注解(验证、路由)的支持。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T28-L4 · Symfony:版本
AssetMapper 无需 node 和 webpack 即可管理 CSS/JS——通过 importmap.php。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T28-L5 · Symfony:版本
Symfony 6.4 是没有长期支持的普通版本。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T28-L6 · Symfony:版本
升级到新的 Symfony 主版本时,上一分支的弃用功能仍然可用——主版本不会移除它们。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T28-L7 · Symfony:版本
Symfony 的每个主版本都附带列出变更的 UPGRADE 指南。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T28-L8 · Symfony:版本
Symfony 的哪个组件在没有 node/webpack 的情况下管理资源和 importmap?
Верный ответ: asset-mapper
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T28-L9-mc · Symfony:版本
项目从 Symfony 6.4 升级到 8.1。这段代码在 8.1 上会输出什么? ```php echo class_exists(\Symfony\Component\Security\Guard\AbstractGuardAuthenticator::class) ? 'yes' : 'no'; ```
Верный ответ: no
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T28-L10-mc · Symfony:版本
项目从 Symfony 6.4 升级到 8.1。这段代码在 8.1 上会输出什么? ```php echo class_exists(\Symfony\Component\Routing\Loader\AnnotationClassLoader::class) ? 'yes' : 'no'; echo class_exists(\Symfony\Component\Routing\Loader\AttributeClassLoader::class) ? 'yes' : 'no'; ```
Верный ответ: noyes
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
75.0%
Symfony:8.2 与未来
100
T29-L1 · Symfony:8.2 与未来
截至 2026-11-07,Symfony 8.2 已经发布。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T29-L2 · Symfony:8.2 与未来
截至 2026-11-07,Symfony 8.2 计划于 2026 年 11 月发布,遵循通常的六个月周期。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
0
T29-L3 · Symfony:8.2 与未来
在 8.1 之后(截至 2026-11-07)会发布哪个 Symfony 版本?
Верный ответ: 8.2
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T29-L4 · Symfony:8.2 与未来
Symfony 8.2 是一个主版本,需要为新的 API 重写应用程序。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T29-L5 · Symfony:8.2 与未来
在主分支内更新(8.1 → 8.2)不应需要修改代码——保持向后兼容。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
0
T29-L6 · Symfony:8.2 与未来
在 Symfony 9.0 之前,8.x 分支的最后一个次版本是什么?
Верный ответ: 8.4
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T29-L7 · Symfony:8.2 与未来
Symfony 8.2 将要求 PHP 8.5——必须随之升级 PHP。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T29-L8 · Symfony:8.2 与未来
在 8.x 分支中添加的弃用功能,最早也要到 Symfony 9.0 才会移除。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
40.0%
Twig
100
T21-L1 · Twig
在 Twig 中,{{ }} 里面可以直接调用任意的 PHP 代码。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T21-L2 · Twig
默认情况下,Twig 会自动转义输出的变量。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T21-L3 · Twig
Twig 的 |e 过滤器会对字符串进行转义,以便在 HTML 上下文中安全输出。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T21-L4 · Twig
twig/intl-extra 中哪个过滤器按本地化设置格式化数字?
Верный ответ: format_number
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T21-L5 · Twig
|raw 过滤器会对值关闭自动转义。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T21-L6 · Twig
在 Twig 中,{{ }} 输出表达式的值,而 {% %} 执行标签——条件、循环、set。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T21-L7 · Twig
Twig 模板中不能声明变量——值只能由控制器传入。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T21-L8 · Twig
Twig 的哪个函数会输出变量的调试结构(数组、对象)?
Верный ответ: dump
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T21-L9-mc · Twig
这个 Twig 模板会输出什么? ```twig {{ false|default(2) * 3 }} ```
Верный ответ: 6
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
0
T21-L10-mc · Twig
渲染这个模板时 render() 会抛出哪个异常类? ```twig {{ 'a' ~ 1 + 2 }} ```
Верный ответ: runtimeerror
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
66.7%
Bootstrap
0
T24-L1 · Bootstrap
Bootstrap 是一套现成 UI 组件的 CSS/JS 库,而不是 SPA 框架。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
0
T24-L2 · Bootstrap
Bootstrap 的哪个类提供了按断点固定最大宽度的响应式容器?
Верный ответ: container
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T24-L3 · Bootstrap
Bootstrap 的栅格基于 CSS float,把一行分成 16 列。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T24-L4 · Bootstrap
Bootstrap 的命名断点(类名中的中缀)是 sm、md、lg、xl、xxl——共五个。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T24-L5 · Bootstrap
像 .mt-3 或 .px-2 这样的工具类使用间距刻度:数字是 $spacer 的倍数。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T24-L6 · Bootstrap
Bootstrap 5 的哪个 data 属性可以在元素上启用交互组件(例如 dropdown)?
Верный ответ: data-bs-toggle
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T24-L7 · Bootstrap
Bootstrap 5 的组件不依赖 jQuery——使用原生 JS。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T24-L8 · Bootstrap
Bootstrap 的深色模式是通过在根元素上添加 .dark 类开启的。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T24-L9-mc · Bootstrap
在 Bootstrap 5.3 中,视口宽度 992px 时 .container 的 max-width 是多少?
Верный ответ: 960
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T24-L10-mc · Bootstrap
在 Bootstrap 5.3 中,`<p class="text-danger text-primary">…</p>` 的文字颜色由哪个工具类决定?回答胜出的类名。
Верный ответ: text-danger
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
50.0%
Doctrine
100
T14-L1 · Doctrine
Doctrine ORM 会在运行时首次使用实体时自动在数据库中创建表。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T14-L2 · Doctrine
EntityManager 的哪个方法把新对象标记为受管理(managed),而 SQL 延迟到 flush() 才执行?
Верный ответ: persist
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T14-L3 · Doctrine
在 Doctrine ORM 3 中,EntityManager::merge() 方法存在,并把传入的对象变成受管理的。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T14-L4 · Doctrine
DQL 查询以实体及其字段为单位编写,而不是表和列。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T14-L5 · Doctrine
如果不存在 id 为 999 的记录,$repository->find(999) 返回什么?
Верный ответ: null
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T14-L6 · Doctrine
Symfony 的 DoctrineBundle 会在每个请求结束时自动调用 flush()。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T14-L7 · Doctrine
对于受管理的实体,只需修改属性即可:flush() 会在没有显式 persist() 的情况下提交更改——Unit of Work 会追踪变更。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T14-L8 · Doctrine
remove() 会立即执行 SQL DELETE,不会等到 flush()。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T14-L9-mc · Doctrine
给定:Doctrine ORM 3,EntityManager 使用内存 SQLite,实体 User 带自增主键。users 表为空。这段代码会输出什么? ```php $u = new User(name: 'B'); $em->persist($u); $em->remove($u); $em->flush(); echo count($em->getConnection()->fetchAllAssociative('SELECT * FROM users')); ```
Верный ответ: 0
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T14-L10-mc · Doctrine
给定:Doctrine ORM 3,EntityManager 使用内存 SQLite,实体 User 带自增主键。users 表为空。这段代码会输出什么? ```php $u = new User(name: 'A'); $em->persist($u); $em->flush(); $a = $em->find(User::class, $u->getId()); $b = $em->find(User::class, $u->getId()); echo spl_object_id($a) === spl_object_id($b) ? 'same' : 'diff'; ```
Верный ответ: same
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
83.3%
PostgreSQL
100
T15-L1 · PostgreSQL
PostgreSQL 使用 MVCC,因此读会阻塞写,写也会阻塞读。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T15-L2 · PostgreSQL
哪条 SQL 命令会显示查询的执行计划,而不实际执行查询?
Верный ответ: explain
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T15-L3 · PostgreSQL
SERIAL 和 GENERATED ... AS IDENTITY 只是同一机制的两个名称。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T15-L4 · PostgreSQL
默认情况下,PostgreSQL 的 UNIQUE 约束在列中只允许一行 NULL。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T15-L5 · PostgreSQL
PostgreSQL 的哪个聚合函数用分隔符拼接字符串?
Верный ответ: string_agg
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T15-L6 · PostgreSQL
普通 VACUUM 会把死元组占用的空间归还给操作系统。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T15-L7 · PostgreSQL
在窗口函数的定义中,哪个关键字把行分成若干组,函数按组计算?
Верный ответ: partition by
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T15-L8 · PostgreSQL
READ COMMITTED 隔离级别能防止不可重复读(non-repeatable read)。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T15-L9-mc · PostgreSQL
这个 SQL 查询返回什么(PostgreSQL 17)? ```sql CREATE TEMP TABLE t (id int, x int); INSERT INTO t VALUES (1, 10), (2, 20), (3, 30); SELECT string_agg(s::text, ',' ORDER BY id) FROM ( SELECT id, sum(x) OVER (ORDER BY id) AS s FROM t ) q; ```
Верный ответ: 10,30,60
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T15-L10-mc · PostgreSQL
这个 SQL 查询返回什么(PostgreSQL 17)? ```sql CREATE TEMP TABLE t (x int); INSERT INTO t VALUES (1), (NULL); SELECT count(x) FROM t; ```
Верный ответ: 1
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
69.2%
PostgreSQL:事务与索引
100
T17-L1 · PostgreSQL:事务与索引
默认情况下,PostgreSQL 会把每条单独的 SQL 语句包在自己的隐式事务中(autocommit)。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T17-L2 · PostgreSQL:事务与索引
哪条 SQL 命令结束事务并保存其中的所有更改?
Верный ответ: commit
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T17-L3 · PostgreSQL:事务与索引
索引加速的不只是 SELECT:按索引列查找的 UPDATE 和 DELETE 同样受益。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
0
T17-L4 · PostgreSQL:事务与索引
要回滚事务中的部分语句,PostgreSQL 使用 SAVEPOINT。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T17-L5 · PostgreSQL:事务与索引
EXPLAIN ANALYZE 显示查询计划,而不实际执行查询。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T17-L6 · PostgreSQL:事务与索引
哪个 PostgreSQL 扩展为向量(embedding)搜索添加了向量类型和索引?
Верный ответ: vector
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
0
T17-L7 · PostgreSQL:事务与索引
部分索引(CREATE INDEX ... WHERE ...)只为满足条件的行构建。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T17-L8 · PostgreSQL:事务与索引
PostgreSQL 的 SERIALIZABLE 隔离级别是通过锁定事务读取的行来实现的。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T17-L9-mc · PostgreSQL:事务与索引
这个 SQL 查询返回什么(PostgreSQL 17)? ```sql CREATE TEMP TABLE t (a int); CREATE UNIQUE INDEX ON t (a); INSERT INTO t VALUES (1) ON CONFLICT DO NOTHING; INSERT INTO t VALUES (1) ON CONFLICT DO NOTHING; SELECT count(*) FROM t; ```
Верный ответ: 1
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T17-L10-mc · PostgreSQL:事务与索引
这组 psql 命令会输出什么? ```sql BEGIN; CREATE TEMP TABLE t (a int, UNIQUE (a) DEFERRABLE INITIALLY DEFERRED); INSERT INTO t VALUES (1); INSERT INTO t VALUES (1); SELECT count(*) FROM t; ```
Верный ответ: 2
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
41.7%
HTTP 与 REST API
100
T19-L1 · HTTP 与 REST API
HTTP 状态 201 表示请求成功创建了新资源。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T19-L2 · HTTP 与 REST API
哪个 HTTP 状态表示请求成功且响应体为空(例如 DELETE 之后)?
Верный ответ: 204
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T19-L3 · HTTP 与 REST API
按 HTTP 规范,DELETE 方法是幂等的:对同一资源重复请求不会改变结果。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T19-L4 · HTTP 与 REST API
Access-Control-Allow-Origin 头是由客户端发送的,以便服务器同意接受来自其他源的请求。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T19-L5 · HTTP 与 REST API
状态码 429 Too Many Requests 用于客户端超出请求频率限制(rate limiting)的情况。
Верный ответ: 是
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T19-L6 · HTTP 与 REST API
5xx 表示客户端错误,而 4xx 表示服务器端错误。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T19-L7 · HTTP 与 REST API
哪个 HTTP 头指明请求或响应体的 MIME 类型?
Верный ответ: content-type
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T19-L8 · HTTP 与 REST API
与 PUT 不同,按照 RFC 5789,PATCH 不要求幂等。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T19-L9-mc · HTTP 与 REST API
这条命令发送哪个 HTTP 方法? ```bash curl -s -d 'a=1' http://demo.local/api ```
Верный ответ: post
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T19-L10-mc · HTTP 与 REST API
这条命令发送哪个 HTTP 方法? ```bash curl -s -G -d 'a=1' http://demo.local/api ```
Верный ответ: get
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
75.0%
安全与 OAuth
100
T20-L1 · 安全与 OAuth
用普通 == 把密码的哈希与库中哈希比较就足以校验密码。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T20-L2 · 安全与 OAuth
CSRF 令牌由服务器发放(绑定会话),并在 unsafe 请求(POST 等)时在服务器端校验。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T20-L3 · 安全与 OAuth
哪个 HTTP 头用于启用 CSP(Content Security Policy)策略?
Верный ответ: content-security-policy
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T20-L4 · 安全与 OAuth
OAuth 2.0 是身份认证协议:access 令牌能说明用户是谁。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T20-L5 · 安全与 OAuth
XSS 可以通过在写库前对输入做服务器端校验来防止。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T20-L6 · 安全与 OAuth
在 OAuth 2.0 授权码流程中,哪个参数会回到 redirect_uri 并用于换取 access 令牌?
Верный ответ: code
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T20-L7 · 安全与 OAuth
Refresh 令牌的生命周期比 access 令牌长,可在用户不重新登录的情况下换取新的 access 令牌。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T20-L8 · 安全与 OAuth
密码盐必须保密:没有盐就无法校验哈希。
Верный ответ: 否
run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗
100
T20-L9-mc · 安全与 OAuth
客户端用不存在的 client_id 请求令牌端点(RFC 6749)。端点的 error 字段返回什么值?
Верный ответ: invalid_client
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T20-L10-mc · 安全与 OAuth
OAuth 2.0:客户端以 response_type=token 开始流程。授权服务器把 access_token 放在 redirect_uri 的哪个部分?
Верный ответ: fragment
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
75.0%
测试:PHPUnit
100
T18-L1 · 测试:PHPUnit
PHPUnit 会执行任何类的测试方法——不必继承 TestCase。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T18-L2 · 测试:PHPUnit
PHPUnit 的 setUp() 在类的所有测试之前只执行一次。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T18-L3 · 测试:PHPUnit
数据提供者(data provider)只允许用一组参数运行测试。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T18-L4 · 测试:PHPUnit
PHPUnit 的哪个方法用于声明期望抛出某个特定类的异常?
Верный ответ: expectexception
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T18-L5 · 测试:PHPUnit
在 PHPUnit 中,stub(桩)检查哪些方法被调用过,而 mock(模拟对象)只是返回数据。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T18-L6 · 测试:PHPUnit
在 PHPUnit 10+ 中,向测试传递数据的推荐方式是 #[DataProvider] 属性(@dataProvider 注解已弃用)。
Верный ответ: 是
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T18-L7 · 测试:PHPUnit
PHPUnit 不允许声明一个测试依赖于另一个测试的结果。
Верный ответ: 否
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
0
T18-L8 · 测试:PHPUnit
PHPUnit 的哪个命令行选项会让测试以随机顺序执行?
Верный ответ: --order-by=random
run-12: ⬜ · run-13: ⬜ · run-14: ⬜ · run-15: ⬜ · run-16: ⬜
100
T18-L9-mc · 测试:PHPUnit
这条命令会执行多少个测试? ```php use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Attributes\DataProvider; final class CalcTest extends TestCase { public static function prov(): array { return [[1], [2], [3]]; } #[DataProvider('prov')] public function test_sum(int $x): void { $this->assertTrue($x > 0); } #[DataProvider('prov')] public function test_sum_abs(int $x): void { $this->assertTrue($x > 0); } public function test_other(): void { $this->assertTrue(true); } } ``` 命令:`phpunit CalcTest.php --filter test_sum`(PHPUnit 10.5)
Верный ответ: 6
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
100
T18-L10-mc · 测试:PHPUnit
这条命令会执行多少个测试,其中多少个失败(failure)?用逗号分隔的两个数字回答(执行数, 失败数)。 ```php use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Attributes\DataProvider; final class Calc2Test extends TestCase { public function prov(): array { return [[1], [-1]]; } #[DataProvider('prov')] public function test_x(int $x): void { $this->assertTrue($x > 0); } } ``` 命令:`phpunit Calc2Test.php`(PHPUnit 10.5)
Верный ответ: 2,1
run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓
83.3%

Прогоны: точность и стоимость

ПрогонthinkВерно% ВремяТокены (вх / вых / кэш)
run-12decision153 / 24063.8%51.4 c30292 / 0 / 0
run-13decision153 / 24063.8%51.3 c30292 / 0 / 0
run-14decision153 / 24063.8%51.6 c30292 / 0 / 0
run-15decision153 / 24063.8%53.0 c30292 / 0 / 0
run-16decision153 / 24063.8%53.0 c30292 / 0 / 0

Флипующие клетки

Ни одна клетка не флипует: все 96 ответов одинаковы во всех прогонах.

Все клетки

КлеткаВопросОтветы по прогонамВерный ответ
T01-L1
语法与运算符
双引号字符串和单引号字符串的处理方式完全相同,区别只在速度。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T01-L2
语法与运算符
?? 运算符按 isset 的语义工作,对未定义的变量不会产生任何警告。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T01-L3
语法与运算符
下面代码输出什么:echo 'a', 'b';run-12: — · run-13: — · run-14: — · run-15: — · run-16: —ab
T01-L4
语法与运算符
print 返回值 1,可以用在表达式内部。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T01-L5
语法与运算符
如果左侧操作数为假,?: 运算符(Elvis 运算符)返回左侧操作数。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T01-L6
语法与运算符
在 PHP 8 中,连接运算符(.)的优先级低于加法和减法。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T01-L7
语法与运算符
表达式 2 ** 3 ** 2 在 PHP 中按 (2 ** 3) ** 2 计算,即等于 64。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T01-L8
语法与运算符
下面代码输出什么字符串:echo '总和: ' . 2 + 3;(PHP 8)?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —总和: 5
T02-L1
类型与比较
在严格比较(===)下,数组被视为相等,与元素顺序无关。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T02-L2
类型与比较
表达式 0 == false 返回 false,因为这是严格比较。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T02-L3
类型与比较
在 PHP 8 中,表达式 "abc" == 0 的结果是 true。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T02-L4
类型与比较
在宽松比较下,null 同时等于 0、空字符串和 false。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T02-L5
类型与比较
表达式 (int) '42abc' 返回什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —42
T02-L6
类型与比较
表达式 '5' + 5 返回什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —10
T02-L7
类型与比较
转换为字符串时,false 会变成 "0"。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗否
T02-L8
类型与比较
表达式 0.1 + 0.2 === 0.3 的结果是 false。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T03-L1
字符串
strrev() 能正确反转 UTF-8 字符串。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T03-L2
字符串
str_contains('Hello world', 'world') 返回 true。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T03-L3
字符串
str_pad() 只能在字符串右侧补齐。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T03-L4
字符串
默认情况下 trim() 只去掉空格,不会处理制表符和换行符。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T03-L5
字符串
对 UTF-8 字符串,strlen('你好') 返回多少个字节(BYTES)?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —6
T03-L6
字符串
表达式 substr('abcdef', -3) 返回什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —def
T03-L7
字符串
ucfirst() 会原地修改传入的字符串。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T03-L8
字符串
heredoc 支持变量插值,而 nowdoc 不支持。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T04-L1
数组
sort() 函数会保持数组键与值之间的对应关系。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T04-L2
数组
数组中的字符串键 '5' 会存成整数 5。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T04-L3
数组
in_array() 函数默认使用严格比较(===)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T04-L4
数组
不带回调时,array_filter() 会删除数组中所有“空”(falsy)元素。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T04-L5
数组
默认情况下,array_slice() 会保留数组原有的数字键。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T04-L6
数组
array_slice([10, 20, 30, 40], 1, 2) 返回什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —[20,30]
T04-L7
数组
count(['a' => 1] + ['a' => 9, 'b' => 2]) 的元素个数是多少?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —2
T04-L8
数组
从 PHP 8.1 起,展开运算符 [...$a, ...$b] 支持带字符串键的数组。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T05-L1
函数与闭包
在同一个调用中,命名参数不能与数组展开 ...$args 组合使用。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗否
T05-L2
函数与闭包
不使用 use 的匿名函数能看到外部作用域的变量。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗否
T05-L3
函数与闭包
调用 f(1, 2, 3) 时,function f($a) { return func_num_args(); } 内部的 func_num_args() 返回什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —3
T05-L4
函数与闭包
箭头函数 fn 的函数体可以是用花括号包起来的多个表达式。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T05-L5
函数与闭包
箭头函数 fn 按引用捕获外部变量(惰性地,在使用时才取值)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T05-L6
函数与闭包
用 static function () {} 声明的闭包不会捕获 $this。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T05-L7
函数与闭包
下面代码输出什么:$x = 5; $f = function () use ($x) { return $x; }; $x = 7; echo $f();run-12: — · run-13: — · run-14: — · run-15: — · run-16: —5
T05-L8
函数与闭包
在弱类型模式(不用 strict_types)下,把字符串 "5" 传给 int 类型的参数是允许的。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T06-L1
OOP:类与继承
PHP 支持构造函数属性提升(promotion):public function __construct(private int $x) {}。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T06-L2
OOP:类与继承
哪个关键字禁止在子类中重写方法?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —final
T06-L3
OOP:类与继承
声明为 final 的方法不能在子类中重写。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T06-L4
OOP:类与继承
父类中 private 可见性的属性在子类中可以访问。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T06-L5
OOP:类与继承
get_class(new class {}) 返回什么?请回答 NUL 字节之前的部分(不含文件路径)。run-12: — · run-13: — · run-14: — · run-15: — · run-16: —class@anonymous
T06-L6
OOP:类与继承
父类的 private 方法不属于继承契约:子类可以用任意可见性声明同名方法。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T06-L7
OOP:类与继承
魔术方法 __get() 只会在访问不存在的属性时被调用。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T06-L8
OOP:类与继承
对 readonly 属性重复赋值会抛出什么——Exception 还是 Error?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —error
T07-L1
接口、trait 与 enum
接口可以声明常量。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T07-L2
接口、trait 与 enum
哪个运算符用于检查对象是否为某个类或接口的实例?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —instanceof
T07-L3
接口、trait 与 enum
接口可以声明静态方法。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T07-L4
接口、trait 与 enum
instanceof 运算符只检查类的继承:它不考虑接口。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T07-L5
接口、trait 与 enum
接口方法可以像 trait 方法一样带有默认实现。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T07-L6
接口、trait 与 enum
抽象类中抽象方法的可见性可以是 protected。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T07-L7
接口、trait 与 enum
对于 enum Foo { case A; case B; case C; },Foo::cases() 返回多少个元素?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —3
T07-L8
接口、trait 与 enum
trait 可以声明常量。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T08-L1
异常与错误
Throwable 接口是 Exception 和 Error 的共同祖先。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T08-L2
异常与错误
catch (Exception $e) 块也能捕获 TypeError,因为 TypeError 最终继承自 Exception。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T08-L3
异常与错误
@ 运算符也能抑制异常。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T08-L4
异常与错误
intdiv(5, 0) 会抛出哪个错误类?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —divisionbyzeroerror
T08-L5
异常与错误
只有当异常被 catch 块捕获时,finally 块才会执行。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T08-L6
异常与错误
在 finally 块内抛出的异常对 try 块的结果没有任何影响。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T08-L7
异常与错误
表达式 (bool) new Exception('x') 返回什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —true
T08-L8
异常与错误
通过 register_shutdown_function() 注册的函数会在调用 exit 时执行。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T09-L1
命名空间与自动加载
use App\Service\Mailer; 这条语句本身就会加载包含该类的文件。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T09-L2
命名空间与自动加载
要导入函数(而不是类),use 后面写哪个词:function 还是 const?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —function
T09-L3
命名空间与自动加载
在 PSR-4 映射 «App\ → src/» 下,类 App\Controller\Api\UserController 会放进哪个文件(相对 src/ 的路径)?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —src/controller/api/usercontroller.php
T09-L4
命名空间与自动加载
引入 vendor/autoload.php 会通过 spl_autoload_register() 注册自动加载器。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T09-L5
命名空间与自动加载
魔术常量 __NAMESPACE__ 包含当前命名空间的名称。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T09-L6
命名空间与自动加载
在 new 中,非限定类名(不带前导 \)会从全局根开始解析。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T09-L7
命名空间与自动加载
在 PSR-4 映射 «App\ → src/» 下,类 App\Model\User 位于文件 src/Model/User.php。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T09-L8
命名空间与自动加载
use 语句可以写在函数体内——该导入只对这个函数生效。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗否
T10-L1
引用与作用域
数组在赋值时是复制,而不是按引用传递。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T10-L2
引用与作用域
下面代码输出什么:$a = [1, 2]; $b = $a; $b[] = 3; echo count($a);run-12: — · run-13: — · run-14: — · run-15: — · run-16: —2
T10-L3
引用与作用域
在函数内部,不通过 global、$GLOBALS 或参数传递,就无法访问全局作用域的用户变量。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T10-L4
引用与作用域
在函数内 unset($GLOBALS['x']) 只对该函数删除这个全局变量。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T10-L5
引用与作用域
下面代码输出什么:function inc(&$x) { $x++; } $n = 5; inc($n); echo $n;run-12: — · run-13: — · run-14: — · run-15: — · run-16: —6
T10-L6
引用与作用域
按值遍历数组的 foreach 操作的是“活”数组:循环内对数组的修改在同一个遍历过程中可见。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T10-L7
引用与作用域
静态属性在每个实例中各自独立:一个对象中的修改对其他对象不可见。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T10-L8
引用与作用域
数组可以用布尔值 true 作为键,并且它会以 bool 类型保存。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T11-L1
生成器、迭代器与 SPL
生成器内部可以使用带值的 return,该值可以通过 $gen->getReturn() 取到。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T11-L2
生成器、迭代器与 SPL
已经遍历完的生成器可以通过 rewind() 倒回并重新遍历。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T11-L3
生成器、迭代器与 SPL
yield from 语法会把遍历委托给另一个生成器或可迭代对象。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T11-L4
生成器、迭代器与 SPL
对于 function g() { yield 1; },get_class(g()) 返回什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —generator
T11-L5
生成器、迭代器与 SPL
count(iterator_to_array((function () { yield from [1, 2, 3]; })())) 返回多少个元素?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —3
T11-L6
生成器、迭代器与 SPL
SplStack 类实现的是 FIFO 队列。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T11-L7
生成器、迭代器与 SPL
ArrayIterator 可以包装数组,并通过 Iterator 接口遍历它。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T11-L8
生成器、迭代器与 SPL
ArrayObject 类的对象不能用 foreach 遍历。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T12-L1
配置与安全
password_hash() 会自动生成盐(salt)——不需要单独传盐。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T12-L2
配置与安全
在 PHP 8 中,PASSWORD_DEFAULT 算法是自动加盐的 md5。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T12-L3
配置与安全
password_verify('secret', password_hash('secret', PASSWORD_DEFAULT)) 返回什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —true
T12-L4
配置与安全
strip_tags() 函数能防 SQL 注入。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T12-L5
配置与安全
session_regenerate_id() 函数用于在用户登录时防范会话固定(session fixation)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T12-L6
配置与安全
哪个内置函数返回 SAPI 的名称(例如 cli)?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —php_sapi_name
T12-L7
配置与安全
session_destroy() 删除服务器端的会话数据,但不会删除用户浏览器中的 cookie。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T12-L8
配置与安全
不调用 session_start(),$_SESSION 数组也会自动加载会话数据。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
VC-L1
PHP 8.4–8.5
函数 array_find() 是在哪个 PHP 版本中引入的?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —8.4
VC-L2
PHP 8.4–8.5
属性钩子(property hooks,直接在属性声明里写 get/set)进入了 PHP 8.4。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
VC-L3
PHP 8.4–8.5
非对称可见性(public private(set) string $name)出现在 PHP 8.4。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
VC-L4
PHP 8.4–8.5
属性 #[\NoDiscard] 最早出现在哪个 PHP 版本?请回答版本号。run-12: — · run-13: — · run-14: — · run-15: — · run-16: —8.5
VC-L5
PHP 8.4–8.5
管道运算符 |> 最早出现在哪个 PHP 版本?请回答版本号。run-12: — · run-13: — · run-14: — · run-15: — · run-16: —8.5
VC-L6
PHP 8.4–8.5
clone-with 语法 clone($obj, ['x' => 1]) 是在哪个 PHP 版本中出现的?请回答版本号。run-12: — · run-13: — · run-14: — · run-15: — · run-16: —8.5
VC-L7
PHP 8.4–8.5
函数 array_first() 和 array_last() 是在哪个 PHP 版本中引入的?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —8.5
VC-L8
PHP 8.4–8.5
截至 2026-11-07,RFC Partial Function Application v2 被接受进入哪个 PHP 版本?请回答版本号。run-12: — · run-13: — · run-14: — · run-15: — · run-16: —8.6
VF-L1
PHP:8.6+ 与未来
截至 2026-11-07,RFC clamp_v2(函数 clamp())在哪个 PHP 版本中实现?请回答版本号。run-12: — · run-13: — · run-14: — · run-15: — · run-16: —8.6
VF-L2
PHP:8.6+ 与未来
截至 2026-11-07,RFC Context Managers v2 已被 PHP 接受。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
VF-L3
PHP:8.6+ 与未来
RFC Bound-Erased Generic Types(泛型)已于 2026 年被拒绝。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
VF-L4
PHP:8.6+ 与未来
截至 2026-11-07,默认启用多线程(ZTS)的 RFC 已在 PHP 中被接受。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
VF-L5
PHP:8.6+ 与未来
PHP 8.5 仍然没有泛型(参数化类型)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
VF-L6
PHP:8.6+ 与未来
截至 2026-11-07,PHP 的最新稳定版本是 8.5,PHP 8.6 尚未发布(GA 为 2026-11-19)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
VF-L7
PHP:8.6+ 与未来
PHP 6 分支从未发布:PHP 5.6 之后直接就是 PHP 7.0。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
VF-L8
PHP:8.6+ 与未来
向核心添加 #[\Deprecated] 属性的 RFC 已被接受。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T25-L1
整洁架构
整洁架构与洋葱架构的依赖规则:内层对外层一无所知——依赖指向中心。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T25-L2
整洁架构
领域实体既不导入 Doctrine 也不导入 Symfony——只用语言本身(最多加标准库)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T25-L3
整洁架构
控制器和 Twig 模板属于业务逻辑层,因为是它们调用用例。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T25-L4
整洁架构
洋葱架构的最中心是什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —domain model
T25-L5
整洁架构
层边界的破坏可以自动捕获:层间依赖分析器(如 deptrac)会在出现禁止的调用时报错。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T25-L6
整洁架构
用例(interactor)可以接受 HTTP 请求或 EntityManager 作为参数——这样更简单。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T25-L7
整洁架构
在接口背后隐藏存储机制、并提供聚合/实体集合的组件叫什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —repository
T25-L8
整洁架构
在整洁架构中,把 PostgreSQL 换成其他数据库只会影响外层——领域和用例保持不变。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T26-L1
DDD
在 DDD 中,聚合(aggregate)只是数据库表的另一个名字。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T26-L2
DDD
值对象(Value Object)不可变,按字段值比较,而不是按标识符。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T26-L3
DDD
聚合的唯一外部入口——所有变更必须经过它——叫什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —aggregate root
T26-L4
DDD
在 DDD 中,仓储是针对聚合(其根)声明的,而不是针对每个实体。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T26-L5
DDD
统一语言(ubiquitous language)是开发者和领域专家共享的模型语言。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T26-L6
DDD
哪种边界内部模型和语言一致,而边界外同样的词对应别的模型?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —bounded context
T26-L7
DDD
贫血模型(只有 getter/setter,逻辑全在服务里)是 DDD 推荐的风格。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T26-L8
DDD
限界上下文意味着每个上下文都有自己的模型:同一个概念在不同上下文中是不同的类。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T13-L1
Symfony
Symfony 的 DI 容器中的服务默认是惰性创建的——在首次使用时才实例化。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T13-L2
Symfony
Symfony 的哪条控制台命令会列出所有已注册的路由?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —debug:router
T13-L3
Symfony
Symfony 的自动装配(autowiring)需要在 services.yaml 中手动声明每一个服务。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T13-L4
Symfony
Twig 模板会编译成 PHP 类并在请求之间缓存。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T13-L5
Symfony
在 Symfony 的 dev 环境中,DI 容器只在被跟踪的文件变化后重建,而不是每个请求都重建。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T13-L6
Symfony
哪个环境变量决定 Symfony 的活动环境(dev/prod)?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —app_env
T13-L7
Symfony
控制器方法可以是 private——Symfony 的路由对类中的任何方法都有效。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T13-L8
Symfony
事件订阅者(EventSubscriber)总是比监听器(listener)更早收到事件,因为接口赋予它们优先级。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T22-L1
Symfony:安全与表单
在现代 Symfony(6.0+)中,认证基于 authenticator 类(AuthenticatorInterface);旧的 guard 体系已被移除。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T22-L2
Symfony:安全与表单
Symfony 的哪个属性直接在控制器方法上检查角色/权限(没有它就返回 403)?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —isgranted
T22-L3
Symfony:安全与表单
Voter(投票者)是 Symfony 检查对具体对象访问权的机制:isGranted('EDIT', $post)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T22-L4
Symfony:安全与表单
在现代 Symfony(7+)中,验证约束用 PHP 属性声明(#[Assert\NotBlank]);不再支持 doctrine 注解。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T22-L5
Symfony:安全与表单
Symfony 表单的 CSRF 保护默认开启:表单在提交时会校验令牌。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T22-L6
Symfony:安全与表单
Symfony 的表单验证在服务器端执行,即使客户端(HTML5)检查已经通过。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T22-L7
Symfony:安全与表单
Symfony maker 的哪条命令会生成表单类(FormType)?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —make:form
T22-L8
Symfony:安全与表单
Symfony 以明文形式把用户密码存在会话中。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T23-L1
Symfony:配置与服务
Symfony 的 bundle 配置放在 config/packages 中——每个 bundle 或主题一个文件。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T23-L2
Symfony:配置与服务
包含开发默认值的 .env 文件会提交到仓库,而真正的机密放在不提交的 .env.local 中。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T23-L3
Symfony:配置与服务
Symfony 的哪条命令会列出容器中注册的服务及其别名?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —debug:container
T23-L4
Symfony:配置与服务
Symfony 容器允许在运行时修改参数:$container->setParameter() 可以在控制器中使用。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T23-L5
Symfony:配置与服务
默认情况下,Symfony 的服务是公开的(public: true)——可以直接从容器中获取。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T23-L6
Symfony:配置与服务
如果 config/packages 里没有配置文件,bundle 就无法工作——每个 bundle 都必须有配置。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T23-L7
Symfony:配置与服务
环境变量的值可以通过 %env(VAR)% 语法注入 services.yaml。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T23-L8
Symfony:配置与服务
Symfony 的哪个环境变量会开启调试模式(影响 profiler 和 Twig 调试)?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —app_debug
T16-L1
Symfony:Messenger
在 Symfony Messenger 中,一条消息只能有一个处理者(handler)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T16-L2
Symfony:Messenger
Messenger 的 sync 传输会把消息放进队列交给 worker 处理,和 async 一样。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T16-L3
Symfony:Messenger
哪条控制台命令会启动处理 Messenger 队列消息的 worker?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —messenger:consume
T16-L4
Symfony:Messenger
失败消息的重试策略(retry_strategy)在 Messenger 传输层面配置。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T16-L5
Symfony:Messenger
默认情况下,Messenger 会把消息序列化为 JSON。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T16-L6
Symfony:Messenger
Symfony Scheduler 按计划产生消息,并通过 Messenger 发送。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T16-L7
Symfony:Messenger
哪个内置的 Messenger 传输通过 Doctrine 把消息存到数据库表中?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —doctrine
T16-L8
Symfony:Messenger
Messenger 的管道可以用自定义 middleware 扩展,放在内置中间件之前或之后。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T28-L1
Symfony:版本
Symfony 的主版本每两年发布一次,次版本每六个月一次(5 月和 11 月)。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T28-L2
Symfony:版本
Symfony 8 要求的最低 PHP 版本是多少?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —8.4
T28-L3
Symfony:版本
Symfony 7.0 保留了对文档块注解(验证、路由)的支持。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T28-L4
Symfony:版本
AssetMapper 无需 node 和 webpack 即可管理 CSS/JS——通过 importmap.php。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T28-L5
Symfony:版本
Symfony 6.4 是没有长期支持的普通版本。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T28-L6
Symfony:版本
升级到新的 Symfony 主版本时,上一分支的弃用功能仍然可用——主版本不会移除它们。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T28-L7
Symfony:版本
Symfony 的每个主版本都附带列出变更的 UPGRADE 指南。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T28-L8
Symfony:版本
Symfony 的哪个组件在没有 node/webpack 的情况下管理资源和 importmap?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —asset-mapper
T29-L1
Symfony:8.2 与未来
截至 2026-11-07,Symfony 8.2 已经发布。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T29-L2
Symfony:8.2 与未来
截至 2026-11-07,Symfony 8.2 计划于 2026 年 11 月发布,遵循通常的六个月周期。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T29-L3
Symfony:8.2 与未来
在 8.1 之后(截至 2026-11-07)会发布哪个 Symfony 版本?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —8.2
T29-L4
Symfony:8.2 与未来
Symfony 8.2 是一个主版本,需要为新的 API 重写应用程序。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T29-L5
Symfony:8.2 与未来
在主分支内更新(8.1 → 8.2)不应需要修改代码——保持向后兼容。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T29-L6
Symfony:8.2 与未来
在 Symfony 9.0 之前,8.x 分支的最后一个次版本是什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —8.4
T29-L7
Symfony:8.2 与未来
Symfony 8.2 将要求 PHP 8.5——必须随之升级 PHP。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T29-L8
Symfony:8.2 与未来
在 8.x 分支中添加的弃用功能,最早也要到 Symfony 9.0 才会移除。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T21-L1
Twig
在 Twig 中,{{ }} 里面可以直接调用任意的 PHP 代码。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T21-L2
Twig
默认情况下,Twig 会自动转义输出的变量。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T21-L3
Twig
Twig 的 |e 过滤器会对字符串进行转义,以便在 HTML 上下文中安全输出。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T21-L4
Twig
twig/intl-extra 中哪个过滤器按本地化设置格式化数字?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —format_number
T21-L5
Twig
|raw 过滤器会对值关闭自动转义。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T21-L6
Twig
在 Twig 中,{{ }} 输出表达式的值,而 {% %} 执行标签——条件、循环、set。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T21-L7
Twig
Twig 模板中不能声明变量——值只能由控制器传入。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T21-L8
Twig
Twig 的哪个函数会输出变量的调试结构(数组、对象)?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —dump
T24-L1
Bootstrap
Bootstrap 是一套现成 UI 组件的 CSS/JS 库,而不是 SPA 框架。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T24-L2
Bootstrap
Bootstrap 的哪个类提供了按断点固定最大宽度的响应式容器?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —container
T24-L3
Bootstrap
Bootstrap 的栅格基于 CSS float,把一行分成 16 列。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T24-L4
Bootstrap
Bootstrap 的命名断点(类名中的中缀)是 sm、md、lg、xl、xxl——共五个。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T24-L5
Bootstrap
像 .mt-3 或 .px-2 这样的工具类使用间距刻度:数字是 $spacer 的倍数。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T24-L6
Bootstrap
Bootstrap 5 的哪个 data 属性可以在元素上启用交互组件(例如 dropdown)?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —data-bs-toggle
T24-L7
Bootstrap
Bootstrap 5 的组件不依赖 jQuery——使用原生 JS。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T24-L8
Bootstrap
Bootstrap 的深色模式是通过在根元素上添加 .dark 类开启的。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T14-L1
Doctrine
Doctrine ORM 会在运行时首次使用实体时自动在数据库中创建表。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T14-L2
Doctrine
EntityManager 的哪个方法把新对象标记为受管理(managed),而 SQL 延迟到 flush() 才执行?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —persist
T14-L3
Doctrine
在 Doctrine ORM 3 中,EntityManager::merge() 方法存在,并把传入的对象变成受管理的。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T14-L4
Doctrine
DQL 查询以实体及其字段为单位编写,而不是表和列。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T14-L5
Doctrine
如果不存在 id 为 999 的记录,$repository->find(999) 返回什么?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —null
T14-L6
Doctrine
Symfony 的 DoctrineBundle 会在每个请求结束时自动调用 flush()。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T14-L7
Doctrine
对于受管理的实体,只需修改属性即可:flush() 会在没有显式 persist() 的情况下提交更改——Unit of Work 会追踪变更。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T14-L8
Doctrine
remove() 会立即执行 SQL DELETE,不会等到 flush()。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T15-L1
PostgreSQL
PostgreSQL 使用 MVCC,因此读会阻塞写,写也会阻塞读。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T15-L2
PostgreSQL
哪条 SQL 命令会显示查询的执行计划,而不实际执行查询?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —explain
T15-L3
PostgreSQL
SERIAL 和 GENERATED ... AS IDENTITY 只是同一机制的两个名称。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T15-L4
PostgreSQL
默认情况下,PostgreSQL 的 UNIQUE 约束在列中只允许一行 NULL。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T15-L5
PostgreSQL
PostgreSQL 的哪个聚合函数用分隔符拼接字符串?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —string_agg
T15-L6
PostgreSQL
普通 VACUUM 会把死元组占用的空间归还给操作系统。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T15-L7
PostgreSQL
在窗口函数的定义中,哪个关键字把行分成若干组,函数按组计算?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —partition by
T15-L8
PostgreSQL
READ COMMITTED 隔离级别能防止不可重复读(non-repeatable read)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T17-L1
PostgreSQL:事务与索引
默认情况下,PostgreSQL 会把每条单独的 SQL 语句包在自己的隐式事务中(autocommit)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T17-L2
PostgreSQL:事务与索引
哪条 SQL 命令结束事务并保存其中的所有更改?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —commit
T17-L3
PostgreSQL:事务与索引
索引加速的不只是 SELECT:按索引列查找的 UPDATE 和 DELETE 同样受益。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T17-L4
PostgreSQL:事务与索引
要回滚事务中的部分语句,PostgreSQL 使用 SAVEPOINT。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T17-L5
PostgreSQL:事务与索引
EXPLAIN ANALYZE 显示查询计划,而不实际执行查询。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T17-L6
PostgreSQL:事务与索引
哪个 PostgreSQL 扩展为向量(embedding)搜索添加了向量类型和索引?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —vector
T17-L7
PostgreSQL:事务与索引
部分索引(CREATE INDEX ... WHERE ...)只为满足条件的行构建。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T17-L8
PostgreSQL:事务与索引
PostgreSQL 的 SERIALIZABLE 隔离级别是通过锁定事务读取的行来实现的。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T19-L1
HTTP 与 REST API
HTTP 状态 201 表示请求成功创建了新资源。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T19-L2
HTTP 与 REST API
哪个 HTTP 状态表示请求成功且响应体为空(例如 DELETE 之后)?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —204
T19-L3
HTTP 与 REST API
按 HTTP 规范,DELETE 方法是幂等的:对同一资源重复请求不会改变结果。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T19-L4
HTTP 与 REST API
Access-Control-Allow-Origin 头是由客户端发送的,以便服务器同意接受来自其他源的请求。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T19-L5
HTTP 与 REST API
状态码 429 Too Many Requests 用于客户端超出请求频率限制(rate limiting)的情况。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗是
T19-L6
HTTP 与 REST API
5xx 表示客户端错误,而 4xx 表示服务器端错误。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T19-L7
HTTP 与 REST API
哪个 HTTP 头指明请求或响应体的 MIME 类型?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —content-type
T19-L8
HTTP 与 REST API
与 PUT 不同,按照 RFC 5789,PATCH 不要求幂等。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T20-L1
安全与 OAuth
用普通 == 把密码的哈希与库中哈希比较就足以校验密码。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T20-L2
安全与 OAuth
CSRF 令牌由服务器发放(绑定会话),并在 unsafe 请求(POST 等)时在服务器端校验。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T20-L3
安全与 OAuth
哪个 HTTP 头用于启用 CSP(Content Security Policy)策略?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —content-security-policy
T20-L4
安全与 OAuth
OAuth 2.0 是身份认证协议:access 令牌能说明用户是谁。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T20-L5
安全与 OAuth
XSS 可以通过在写库前对输入做服务器端校验来防止。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T20-L6
安全与 OAuth
在 OAuth 2.0 授权码流程中,哪个参数会回到 redirect_uri 并用于换取 access 令牌?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —code
T20-L7
安全与 OAuth
Refresh 令牌的生命周期比 access 令牌长,可在用户不重新登录的情况下换取新的 access 令牌。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T20-L8
安全与 OAuth
密码盐必须保密:没有盐就无法校验哈希。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗否
T18-L1
测试:PHPUnit
PHPUnit 会执行任何类的测试方法——不必继承 TestCase。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T18-L2
测试:PHPUnit
PHPUnit 的 setUp() 在类的所有测试之前只执行一次。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T18-L3
测试:PHPUnit
数据提供者(data provider)只允许用一组参数运行测试。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T18-L4
测试:PHPUnit
PHPUnit 的哪个方法用于声明期望抛出某个特定类的异常?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —expectexception
T18-L5
测试:PHPUnit
在 PHPUnit 中,stub(桩)检查哪些方法被调用过,而 mock(模拟对象)只是返回数据。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T18-L6
测试:PHPUnit
在 PHPUnit 10+ 中,向测试传递数据的推荐方式是 #[DataProvider] 属性(@dataProvider 注解已弃用)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓是
T18-L7
测试:PHPUnit
PHPUnit 不允许声明一个测试依赖于另一个测试的结果。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓否
T18-L8
测试:PHPUnit
PHPUnit 的哪个命令行选项会让测试以随机顺序执行?run-12: — · run-13: — · run-14: — · run-15: — · run-16: —--order-by=random
T01-L3-mc
语法与运算符
下面代码输出什么:echo 'a', 'b';run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓ab
T01-L8-mc
语法与运算符
下面代码输出什么字符串:echo '总和: ' . 2 + 3;(PHP 8)?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓总和: 5
T02-L5-mc
类型与比较
表达式 (int) '42abc' 返回什么?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓42
T02-L6-mc
类型与比较
表达式 '5' + 5 返回什么?run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗10
T03-L5-mc
字符串
对 UTF-8 字符串,strlen('你好') 返回多少个字节(BYTES)?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓6
T03-L6-mc
字符串
表达式 substr('abcdef', -3) 返回什么?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓def
T04-L6-mc
数组
array_slice([10, 20, 30, 40], 1, 2) 返回什么?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓[20,30]
T04-L7-mc
数组
count(['a' => 1] + ['a' => 9, 'b' => 2]) 的元素个数是多少?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓2
T05-L3-mc
函数与闭包
调用 f(1, 2, 3) 时,function f($a) { return func_num_args(); } 内部的 func_num_args() 返回什么?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓3
T05-L7-mc
函数与闭包
下面代码输出什么:$x = 5; $f = function () use ($x) { return $x; }; $x = 7; echo $f();run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓5
T06-L2-mc
OOP:类与继承
哪个关键字禁止在子类中重写方法?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓final
T06-L5-mc
OOP:类与继承
get_class(new class {}) 返回什么?请回答 NUL 字节之前的部分(不含文件路径)。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓class@anonymous
T06-L8-mc
OOP:类与继承
对 readonly 属性重复赋值会抛出什么——Exception 还是 Error?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓error
T07-L2-mc
接口、trait 与 enum
哪个运算符用于检查对象是否为某个类或接口的实例?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓instanceof
T07-L7-mc
接口、trait 与 enum
对于 enum Foo { case A; case B; case C; },Foo::cases() 返回多少个元素?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓3
T08-L4-mc
异常与错误
intdiv(5, 0) 会抛出哪个错误类?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓divisionbyzeroerror
T08-L7-mc
异常与错误
表达式 (bool) new Exception('x') 返回什么?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓true
T09-L2-mc
命名空间与自动加载
要导入函数(而不是类),use 后面写哪个词:function 还是 const?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓function
T09-L3-mc
命名空间与自动加载
在 PSR-4 映射 «App\ → src/» 下,类 App\Controller\Api\UserController 会放进哪个文件(相对 src/ 的路径)?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓src/controller/api/usercontroller.php
T10-L2-mc
引用与作用域
下面代码输出什么:$a = [1, 2]; $b = $a; $b[] = 3; echo count($a);run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓2
T10-L5-mc
引用与作用域
下面代码输出什么:function inc(&$x) { $x++; } $n = 5; inc($n); echo $n;run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓6
T11-L4-mc
生成器、迭代器与 SPL
对于 function g() { yield 1; },get_class(g()) 返回什么?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓generator
T11-L5-mc
生成器、迭代器与 SPL
count(iterator_to_array((function () { yield from [1, 2, 3]; })())) 返回多少个元素?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓3
T12-L3-mc
配置与安全
password_verify('secret', password_hash('secret', PASSWORD_DEFAULT)) 返回什么?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓true
T12-L6-mc
配置与安全
哪个内置函数返回 SAPI 的名称(例如 cli)?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓php_sapi_name
VC-L1-mc
PHP 8.4–8.5
函数 array_find() 是在哪个 PHP 版本中引入的?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓8.4
VC-L4-mc
PHP 8.4–8.5
属性 #[\NoDiscard] 最早出现在哪个 PHP 版本?请回答版本号。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓8.5
VC-L5-mc
PHP 8.4–8.5
管道运算符 |> 最早出现在哪个 PHP 版本?请回答版本号。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗8.5
VC-L6-mc
PHP 8.4–8.5
clone-with 语法 clone($obj, ['x' => 1]) 是在哪个 PHP 版本中出现的?请回答版本号。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗8.5
VC-L7-mc
PHP 8.4–8.5
函数 array_first() 和 array_last() 是在哪个 PHP 版本中引入的?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓8.5
VC-L8-mc
PHP 8.4–8.5
截至 2026-11-07,RFC Partial Function Application v2 被接受进入哪个 PHP 版本?请回答版本号。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓8.6
VF-L1-mc
PHP:8.6+ 与未来
截至 2026-11-07,RFC clamp_v2(函数 clamp())在哪个 PHP 版本中实现?请回答版本号。run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓8.6
T25-L4-mc
整洁架构
洋葱架构的最中心是什么?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓domain model
T25-L7-mc
整洁架构
在接口背后隐藏存储机制、并提供聚合/实体集合的组件叫什么?run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗repository
T26-L3-mc
DDD
聚合的唯一外部入口——所有变更必须经过它——叫什么?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓aggregate root
T26-L6-mc
DDD
哪种边界内部模型和语言一致,而边界外同样的词对应别的模型?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓bounded context
T13-L2-mc
Symfony
Symfony 的哪条控制台命令会列出所有已注册的路由?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓debug:router
T13-L6-mc
Symfony
哪个环境变量决定 Symfony 的活动环境(dev/prod)?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓app_env
T22-L2-mc
Symfony:安全与表单
Symfony 的哪个属性直接在控制器方法上检查角色/权限(没有它就返回 403)?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓isgranted
T22-L7-mc
Symfony:安全与表单
Symfony maker 的哪条命令会生成表单类(FormType)?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓make:form
T23-L3-mc
Symfony:配置与服务
Symfony 的哪条命令会列出容器中注册的服务及其别名?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓debug:container
T23-L8-mc
Symfony:配置与服务
Symfony 的哪个环境变量会开启调试模式(影响 profiler 和 Twig 调试)?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓app_debug
T16-L3-mc
Symfony:Messenger
哪条控制台命令会启动处理 Messenger 队列消息的 worker?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓messenger:consume
T16-L7-mc
Symfony:Messenger
哪个内置的 Messenger 传输通过 Doctrine 把消息存到数据库表中?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓doctrine
T28-L2-mc
Symfony:版本
Symfony 8 要求的最低 PHP 版本是多少?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓8.4
T28-L8-mc
Symfony:版本
Symfony 的哪个组件在没有 node/webpack 的情况下管理资源和 importmap?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓asset-mapper
T29-L3-mc
Symfony:8.2 与未来
在 8.1 之后(截至 2026-11-07)会发布哪个 Symfony 版本?run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗8.2
T29-L6-mc
Symfony:8.2 与未来
在 Symfony 9.0 之前,8.x 分支的最后一个次版本是什么?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓8.4
T21-L4-mc
Twig
twig/intl-extra 中哪个过滤器按本地化设置格式化数字?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓format_number
T21-L8-mc
Twig
Twig 的哪个函数会输出变量的调试结构(数组、对象)?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓dump
T24-L2-mc
Bootstrap
Bootstrap 的哪个类提供了按断点固定最大宽度的响应式容器?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓container
T24-L6-mc
Bootstrap
Bootstrap 5 的哪个 data 属性可以在元素上启用交互组件(例如 dropdown)?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓data-bs-toggle
T14-L2-mc
Doctrine
EntityManager 的哪个方法把新对象标记为受管理(managed),而 SQL 延迟到 flush() 才执行?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓persist
T14-L5-mc
Doctrine
如果不存在 id 为 999 的记录,$repository->find(999) 返回什么?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓null
T15-L2-mc
PostgreSQL
哪条 SQL 命令会显示查询的执行计划,而不实际执行查询?run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗explain
T15-L5-mc
PostgreSQL
PostgreSQL 的哪个聚合函数用分隔符拼接字符串?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓string_agg
T15-L7-mc
PostgreSQL
在窗口函数的定义中,哪个关键字把行分成若干组,函数按组计算?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓partition by
T17-L2-mc
PostgreSQL:事务与索引
哪条 SQL 命令结束事务并保存其中的所有更改?run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗commit
T17-L6-mc
PostgreSQL:事务与索引
哪个 PostgreSQL 扩展为向量(embedding)搜索添加了向量类型和索引?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓vector
T19-L2-mc
HTTP 与 REST API
哪个 HTTP 状态表示请求成功且响应体为空(例如 DELETE 之后)?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓204
T19-L7-mc
HTTP 与 REST API
哪个 HTTP 头指明请求或响应体的 MIME 类型?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓content-type
T20-L3-mc
安全与 OAuth
哪个 HTTP 头用于启用 CSP(Content Security Policy)策略?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓content-security-policy
T20-L6-mc
安全与 OAuth
在 OAuth 2.0 授权码流程中,哪个参数会回到 redirect_uri 并用于换取 access 令牌?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓code
T18-L4-mc
测试:PHPUnit
PHPUnit 的哪个方法用于声明期望抛出某个特定类的异常?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓expectexception
T18-L8-mc
测试:PHPUnit
PHPUnit 的哪个命令行选项会让测试以随机顺序执行?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓--order-by=random
T01-L9-mc
语法与运算符
这段代码会输出什么? ```php echo intdiv(7, 2) . intdiv(-7, 2); ```run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗3-3
T01-L10-mc
语法与运算符
这段代码会输出什么? ```php echo -3 ** 2; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓-9
T02-L9-mc
类型与比较
这段代码会输出什么? ```php echo '1e1' == '10' ? 'true' : 'false'; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓true
T02-L10-mc
类型与比较
这段代码会输出什么? ```php switch ('a') { case 0: echo 'zero'; break; default: echo 'other'; } ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓other
T03-L9-mc
字符串
这段代码会输出什么? ```php echo strtr('abc', ['a' => '1', 'ab' => '2']); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓2c
T03-L10-mc
字符串
这段代码会输出什么? ```php echo '[' . substr('hello', -10) . ']'; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓[hello]
T04-L9-mc
数组
这段代码会输出什么? ```php $a = ['k' => 1, 'n' => 2]; $b = ['k' => 9, 'm' => 3]; echo implode(',', array_keys($a + $b)); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓k,n,m
T04-L10-mc
数组
这段代码会输出什么? ```php $a = [[1, 'x', 2], [2, 'y', 1], [3, 'z', 2]]; usort($a, fn($p, $q) => $p[2] <=> $q[2]); echo implode('', array_column($a, 1)); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓yxz
T05-L10-mc
函数与闭包
这段代码会输出什么? ```php function f(int $a, int $b): int { return $a - $b; } echo f(...['b' => 1, 'a' => 5]); ```run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗4
T05-L9-mc
函数与闭包
这段代码会输出什么? ```php class P { private int $v = 3; public function g(): int { return $this->v; } } $p = new P; $f = $p->g(...); $p = null; echo $f(); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓3
T06-L9-mc
OOP:类与继承
这段代码会输出什么? ```php class A { public function who(): string { return static::class; } } class B extends A {} echo (new B)->who(); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓b
T06-L10-mc
OOP:类与继承
这段代码在 PHP 8.5 上会输出什么? ```php class C { public int $x = 0 { set { $this->x = $value * 2; } } } $c = new C; $c->x = 5; echo $c->x; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓10
T07-L9-mc
接口、trait 与 enum
这段代码会输出什么? ```php trait TA { public function f(): string { return 'A'; } } trait TB { public function f(): string { return 'B'; } } class TC { use TA, TB { TB::f insteadof TA; TA::f as g; } } echo (new TC)->f() . (new TC)->g(); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓ba
T07-L10-mc
接口、trait 与 enum
这段代码会输出什么? ```php trait Counter { public static int $n = 0; } class CX { use Counter; } class CY { use Counter; } CX::$n = 1; echo CY::$n; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓0
T08-L10-mc
异常与错误
这段代码会输出什么? ```php function f(): int { try { return 1; } finally { return 2; } } echo f(); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓2
T08-L9-mc
异常与错误
这段代码会输出什么? ```php try { try { throw new RuntimeException('first'); } finally { throw new LogicException('second'); } } catch (LogicException $e) { echo $e->getMessage(); } ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓second
T09-L9-mc
命名空间与自动加载
这段代码会输出什么? ```php namespace N; use App\Foo as Baz; echo Baz::class . '|' . \Baz::class; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓app\foo|baz
T09-L10-mc
命名空间与自动加载
这段代码会输出什么? ```php namespace Ns; class Foo {} $c = 'Foo'; echo (class_exists($c) ? 'yes' : 'no') . (class_exists(__NAMESPACE__ . '\\' . $c) ? 'yes' : 'no'); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓noyes
T10-L9-mc
引用与作用域
这段代码会输出什么? ```php $a = [1, 2, 3]; foreach ($a as &$v) {} $v = 99; echo implode(',', $a); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓1,2,99
T10-L10-mc
引用与作用域
这段代码会输出什么? ```php class A { public function inc(): int { static $n = 0; return ++$n; } } class B extends A {} $a = new A; $b = new B; $a->inc(); $b->inc(); echo $a->inc(); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓3
T11-L9-mc
生成器、迭代器与 SPL
这段代码会输出什么? ```php function g(): Generator { $x = yield 1; return $x + 1; } $g = g(); $g->send(10); echo $g->getReturn(); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓11
T11-L10-mc
生成器、迭代器与 SPL
这段代码会输出什么? ```php function inner(): Generator { yield 1; yield 2; return 'ok'; } function outer(): Generator { $r = yield from inner(); yield $r; } echo implode(',', iterator_to_array(outer())); ```run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗ok,2
T12-L9-mc
配置与安全
这段代码会输出什么? ```php $hash = password_hash('x', PASSWORD_BCRYPT, ['cost' => 4]); echo password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 4]) ? 'yes' : 'no'; echo password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 5]) ? 'yes' : 'no'; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓noyes
T12-L10-mc
配置与安全
这段代码在 PHP 8.5 上会输出什么? ```php echo (E_ALL & 2048) === 0 ? 'strict-out' : 'strict-in'; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓strict-out
T13-L9-mc
Symfony
这段代码会输出什么? ```php use Symfony\Component\HttpFoundation\Request; $r = Request::create('/demo', 'GET', [], [], [], ['HTTP_X_TOKEN' => 'abc']); echo $r->headers->get('X-Token') === 'abc' ? 'mapped' : 'missing'; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓mapped
T13-L10-mc
Symfony
这段代码会输出什么? ```php use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Contracts\EventDispatcher\Event; $d = new EventDispatcher(); $out = ''; $d->addListener('e', function () use (&$out) { $out .= 'B'; }, 10); $d->addListener('e', function () use (&$out) { $out .= 'A'; }); $d->addListener('e', function () use (&$out) { $out .= 'C'; }, 5); $d->dispatch(new Event(), 'e'); echo $out; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓bca
T14-L10-mc
Doctrine
给定:Doctrine ORM 3,EntityManager 使用内存 SQLite,实体 User 带自增主键。users 表为空。这段代码会输出什么? ```php $u = new User(name: 'A'); $em->persist($u); $em->flush(); $a = $em->find(User::class, $u->getId()); $b = $em->find(User::class, $u->getId()); echo spl_object_id($a) === spl_object_id($b) ? 'same' : 'diff'; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓same
T14-L9-mc
Doctrine
给定:Doctrine ORM 3,EntityManager 使用内存 SQLite,实体 User 带自增主键。users 表为空。这段代码会输出什么? ```php $u = new User(name: 'B'); $em->persist($u); $em->remove($u); $em->flush(); echo count($em->getConnection()->fetchAllAssociative('SELECT * FROM users')); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓0
T15-L10-mc
PostgreSQL
这个 SQL 查询返回什么(PostgreSQL 17)? ```sql CREATE TEMP TABLE t (x int); INSERT INTO t VALUES (1), (NULL); SELECT count(x) FROM t; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓1
T15-L9-mc
PostgreSQL
这个 SQL 查询返回什么(PostgreSQL 17)? ```sql CREATE TEMP TABLE t (id int, x int); INSERT INTO t VALUES (1, 10), (2, 20), (3, 30); SELECT string_agg(s::text, ',' ORDER BY id) FROM ( SELECT id, sum(x) OVER (ORDER BY id) AS s FROM t ) q; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓10,30,60
T16-L9-mc
Symfony:Messenger
这段代码会输出什么? ```php use Symfony\Component\Messenger\MessageBus; use Symfony\Component\Messenger\Middleware\MiddlewareInterface; use Symfony\Component\Messenger\Middleware\StackInterface; use Symfony\Component\Messenger\Envelope; final class Trace implements MiddlewareInterface { public function __construct(private string $tag) {} public function handle(Envelope $e, StackInterface $stack): Envelope { echo $this->tag; return $stack->next()->handle($e, $stack); } } $bus = new MessageBus([new Trace('M1'), new Trace('M2')]); $bus->dispatch(new Envelope(new stdClass())); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓m1m2
T16-L10-mc
Symfony:Messenger
这段代码会输出什么? ```php use Symfony\Component\Messenger\MessageBus; use Symfony\Component\Messenger\Middleware\HandleMessageMiddleware; use Symfony\Component\Messenger\Handler\HandlersLocator; use Symfony\Component\Messenger\Handler\HandlerDescriptor; use Symfony\Component\Messenger\Envelope; class Ping {} $n = 0; $d1 = new HandlerDescriptor(function (Ping $m) use (&$n) { $n += 1; }, ['alias' => 'h1']); $d2 = new HandlerDescriptor(function (Ping $m) use (&$n) { $n += 10; }, ['alias' => 'h2']); $bus = new MessageBus([ new HandleMessageMiddleware(new HandlersLocator([Ping::class => [$d1, $d2]])), ]); $bus->dispatch(new Envelope(new Ping())); echo $n; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓11
T17-L9-mc
PostgreSQL:事务与索引
这个 SQL 查询返回什么(PostgreSQL 17)? ```sql CREATE TEMP TABLE t (a int); CREATE UNIQUE INDEX ON t (a); INSERT INTO t VALUES (1) ON CONFLICT DO NOTHING; INSERT INTO t VALUES (1) ON CONFLICT DO NOTHING; SELECT count(*) FROM t; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓1
T17-L10-mc
PostgreSQL:事务与索引
这组 psql 命令会输出什么? ```sql BEGIN; CREATE TEMP TABLE t (a int, UNIQUE (a) DEFERRABLE INITIALLY DEFERRED); INSERT INTO t VALUES (1); INSERT INTO t VALUES (1); SELECT count(*) FROM t; ```run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗2
T18-L9-mc
测试:PHPUnit
这条命令会执行多少个测试? ```php use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Attributes\DataProvider; final class CalcTest extends TestCase { public static function prov(): array { return [[1], [2], [3]]; } #[DataProvider('prov')] public function test_sum(int $x): void { $this->assertTrue($x > 0); } #[DataProvider('prov')] public function test_sum_abs(int $x): void { $this->assertTrue($x > 0); } public function test_other(): void { $this->assertTrue(true); } } ``` 命令:`phpunit CalcTest.php --filter test_sum`(PHPUnit 10.5)run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓6
T18-L10-mc
测试:PHPUnit
这条命令会执行多少个测试,其中多少个失败(failure)?用逗号分隔的两个数字回答(执行数, 失败数)。 ```php use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Attributes\DataProvider; final class Calc2Test extends TestCase { public function prov(): array { return [[1], [-1]]; } #[DataProvider('prov')] public function test_x(int $x): void { $this->assertTrue($x > 0); } } ``` 命令:`phpunit Calc2Test.php`(PHPUnit 10.5)run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓2,1
T19-L9-mc
HTTP 与 REST API
这条命令发送哪个 HTTP 方法? ```bash curl -s -d 'a=1' http://demo.local/api ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓post
T19-L10-mc
HTTP 与 REST API
这条命令发送哪个 HTTP 方法? ```bash curl -s -G -d 'a=1' http://demo.local/api ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓get
T20-L9-mc
安全与 OAuth
客户端用不存在的 client_id 请求令牌端点(RFC 6749)。端点的 error 字段返回什么值?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓invalid_client
T20-L10-mc
安全与 OAuth
OAuth 2.0:客户端以 response_type=token 开始流程。授权服务器把 access_token 放在 redirect_uri 的哪个部分?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓fragment
T21-L9-mc
Twig
这个 Twig 模板会输出什么? ```twig {{ false|default(2) * 3 }} ```run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗6
T21-L10-mc
Twig
渲染这个模板时 render() 会抛出哪个异常类? ```twig {{ 'a' ~ 1 + 2 }} ```run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗runtimeerror
T22-L9-mc
Symfony:安全与表单
这段代码会输出什么? ```php use Symfony\Component\Validator\Validation; use Symfony\Component\Validator\Constraints as Assert; $v = Validation::createValidator(); echo count($v->validate([''], [new Assert\NotBlank()])); ```run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗0
T22-L10-mc
Symfony:安全与表单
这段代码会输出什么? ```php use Symfony\Component\Form\Forms; use Symfony\Component\Form\Extension\Core\Type\TextType; $factory = Forms::createFormFactoryBuilder()->getFormFactory(); $form = $factory->create(TextType::class); try { echo $form->isValid() ? 'valid' : 'invalid'; } catch (Throwable $e) { echo get_class($e); } ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓symfony\component\form\exception\logicexception
T23-L9-mc
Symfony:配置与服务
这段代码会输出什么? ```php use Symfony\Component\DependencyInjection\ContainerBuilder; $c = new ContainerBuilder(); $c->register('a', stdClass::class)->setPublic(true); $c->compile(); echo spl_object_id($c->get('a')) === spl_object_id($c->get('a')) ? 'same' : 'diff'; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓same
T23-L10-mc
Symfony:配置与服务
这段代码会输出什么? ```php use Symfony\Component\DependencyInjection\ContainerBuilder; $c = new ContainerBuilder(); $c->setParameter('name', 'Bob'); $c->setParameter('greeting', 'hi %name%'); $c->setParameter('message', '%greeting%!'); $c->compile(); echo $c->getParameter('message'); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓hi bob!
T24-L9-mc
Bootstrap
在 Bootstrap 5.3 中,视口宽度 992px 时 .container 的 max-width 是多少?run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓960
T24-L10-mc
Bootstrap
在 Bootstrap 5.3 中,`<p class="text-danger text-primary">…</p>` 的文字颜色由哪个工具类决定?回答胜出的类名。run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗text-danger
T25-L9-mc
整洁架构
层:Domain、Application、Infrastructure。deptrac 规则:Application → Domain;Infrastructure → Domain、Application;Domain → 仅 Domain。 对于这个类,deptrac 会报告多少个违规(Violations)? ```php namespace App\Domain; use App\Application\PlaceOrder; use App\Infrastructure\Db; class OrderService { public function __construct( private PlaceOrder $handler, private Db $db, ) {} } ```run-12: ✗ · run-13: ✗ · run-14: ✗ · run-15: ✗ · run-16: ✗2
T25-L10-mc
整洁架构
层:Domain、Application、Infrastructure。deptrac 规则:Application → Domain;Infrastructure → Domain、Application;Domain → 仅 Domain。 对于这个类,deptrac 会报告多少个违规(Violations)? ```php namespace App\Domain; use App\Application\PlaceOrder; use App\Infrastructure\Db; class BillingService { public function __construct( private PlaceOrder $handler, private Db $db, private \App\Infrastructure\Logger $logger, ) {} } ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓3
T26-L10-mc
DDD
这段代码会输出什么? ```php final class Money { public function __construct(public readonly int $amount) {} public function add(Money $o): Money { return new self($this->amount + $o->amount); } } $a = new Money(10); $c = $a->add(new Money(5)); echo $a->amount . ',' . $c->amount; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓10,15
T26-L9-mc
DDD
这段代码会输出什么? ```php final class Order { private array $items = []; public function add(string $sku): void { $this->items[$sku] = true; } public function count(): int { return count($this->items); } public function remove(string $sku): void { if (count($this->items) === 1) { throw new DomainException('last item'); } unset($this->items[$sku]); } } $o = new Order; $o->add('a'); try { $o->remove('a'); } catch (DomainException) { } echo $o->count(); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓1
VC-L9-mc
PHP 8.4–8.5
这段代码在 PHP 8.5 上会输出什么? ```php class C { public function hi(): string { return 'hi'; } } echo new C()->hi(); ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓hi
VC-L10-mc
PHP 8.4–8.5
这段代码在 PHP 8.5 上会输出什么? ```php class Heavy { public int $v = 0; } $r = new ReflectionClass(Heavy::class); $o = $r->newLazyGhost(function (Heavy $obj) { $obj->v = 21; }); echo $r->isUninitializedLazyObject($o) ? 'yes' : 'no'; $o->v; echo $r->isUninitializedLazyObject($o) ? 'yes' : 'no'; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓yesno
T28-L9-mc
Symfony:版本
项目从 Symfony 6.4 升级到 8.1。这段代码在 8.1 上会输出什么? ```php echo class_exists(\Symfony\Component\Security\Guard\AbstractGuardAuthenticator::class) ? 'yes' : 'no'; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓no
T28-L10-mc
Symfony:版本
项目从 Symfony 6.4 升级到 8.1。这段代码在 8.1 上会输出什么? ```php echo class_exists(\Symfony\Component\Routing\Loader\AnnotationClassLoader::class) ? 'yes' : 'no'; echo class_exists(\Symfony\Component\Routing\Loader\AttributeClassLoader::class) ? 'yes' : 'no'; ```run-12: ✓ · run-13: ✓ · run-14: ✓ · run-15: ✓ · run-16: ✓noyes