2 ^0 n. |: t( ?& i0 f14.trigger_error()和user_error()有什么区别? ?! v1 @9 q. J' p% Z" `, x
5 J9 |8 L: ~" X# V! d4 h
A.trigger_error()允许脚本抛出系统级的错误 & a6 ~$ ]+ O0 w- kB.user_error()允许脚本抛出系统级的错误+ v/ Z, v! S3 g
C.user_error()不能被用在错误管理器中3 i0 D: y5 J/ G7 W
D.trigger_error只在PHP5中可用 ) {* Z& Y/ h; p W3 oE.没有区别 / d$ O% F2 S, X; W4 i% c5 x9 R% R
+ w$ N6 b9 i9 [/ C) i15.______函数能返回脚本里任意行中调用的函数的名称。该函数同时还经常被用在调试中,用来判断错误是如何发生的。 6 C/ N0 y; `8 T7 d6 x+ D 2 N+ s6 P# p2 E% Q" XA.print_r2 o! [, l. [/ c
B.var_dump H$ S& h$ M, O+ N0 [ d
C.stack_dump+ T* D6 l- ~% Z/ i
D.debug_backtrace ; m' P6 N) b! Y/ z# OE.以上都不对 # C* v% X" s* j0 E4 l- O' y0 `% o6 ]: H' s
答案, {1 U/ y; r1 u6 e* A2 u
" w" R$ a7 j- Y& M t$ ?3 A/ W/ {' ]1.答案是E。三元操作符把每个if语句连到一起,作为&&操作的一部分。然而本题中,$x=1这个赋值只在第三个if为false时发生。如果第一个和第二个条件都不成立,$x=1就不会执行。这题对三元操作的应用有些极端,实际应用时,需要根据可读性来决定是否需要用三元运算符(本题这种情况就最好不要用)。& I/ c% T6 z4 F; Y; k) U1 h
8 N- t# X$ B# k: b( O
2.问题是由第三方数据源传输缓慢导致的,而你无法控制这个数据源。你也许能在网络连通性上做些工作(假设问题出在你这一边)。还可以对接收到的内容进行缓存,这样能减少获取重复数据的时间。因此,答案是B和E。$ u9 i) @* w/ {) |. Y
, m$ e4 _, j2 `9 n9 W% a
3.正确的选择是B和D。如果关闭错误报告、使用@抑错符和关闭错误日志,那么在你交付给客户的网站出现问题时,你将很难进行分析和调试。1 f9 N; N/ K s4 g/ _
: z Y: J! [ W6 E4.这是在描述===操作符。 : j: o9 n, u/ w6 T. S, C9 M; }$ b+ c& ^% o6 t/ |- q7 W# z
5.正确答案是D。PHP脚本在执行时,将首先被解析成“中间”码(也叫opcode,操作码),然后解释器执行。操作码缓存出现在这两个步骤之间,对解析器的输出进行缓存。下次执行该脚本时,将缓存的输出直接送入解释器。这样就就不需要再解析一次了。2 ?' f5 x ^" \2 U: V
$ K1 U7 p3 L/ S- d7 v
6.正确答案是A和D。如果RAM太小,进程间将出现资源竞争,服务器将大量使用硬盘交换。同样的,如果允许过多进程同时执行,也会使服务器频繁进行交换,导致速度下降。" S j, B- N# O
5 B1 J( V2 S- U/ h. A
7.正确答案是A和C。脚本不检验datebase_query()的调用是否成功,因此将持续执行下去,最终产生错误。此外,$my_id参数没有转义——可能导致代码注入(详见第11章)。# Q$ O2 s# ^( f