$7.49 .com domain with free InstantPage Website Builder$1.99 Web Hosting   捷飞网络官方淘宝店   Godaddy 优惠码
返回列表 发帖
分享到:




[PHP 语言] php中 empty()函数的 使用说明

对于我们做php开发的来说,empty函数(注,其实empty是一个语言结构而非函数,这里说函数只是个人习惯)是再熟悉不过的一个函数了,查PHP的手册描述如下:
; K" `- o% |- F3 d8 g4 B  V Determine whether a variable is considered to be empty. # \. O  Q, }1 m- a$ n& b
& h/ p7 Z& o% d3 U, o
EMPTY() 函数3 b- }3 P$ W! ?

, v. z* E# f$ v6 `4 G. |确定一个表达式的值是否为空。
2 q8 V2 g) v' f# B5 ^" p语法
0 N4 w1 O% e7 dEMPTY(表达式)
& _" v4 k- `0 g返值类型
4 n5 Z  t, ^, D' w  ~& R( N逻辑型
/ m% \5 g" j0 F# |/ l1 L参数描述
  d3 d7 {6 v! w( [3 t% _表达式:被用于测试是否为空的表达式。
: j& Z3 E" W0 w6 k表达式的数据类型可以是字符、数值、日期或者逻辑型数据,各种类型数据当出现以下情况下时,该函数返回 .T.:& W4 `4 b5 A/ _( N2 J
1 c3 T$ ?9 ~3 {' U+ y! K- q6 W
2 n8 m. D" G& ?- N; k$ A数据类型值1 V2 `: e( }( R. c$ `; d- T
字符空字符串,或只有空格、回车符等。0 j2 s1 v8 W" A  q; u- k
数值0* k; S% q$ T# e0 w
货币07 Y3 H% C/ _0 @2 k4 v- V: \
浮点0$ w" L9 F8 F' X+ }+ v
整数0
" r$ S; g8 n' \; [0 T双精度0
1 ?2 ~- Y+ \" ]" a' H% L. v" f日期空日期,比如 empty(ctod(''))就返回 .T.。; m5 O9 c  P6 V- h0 l: H3 V  |
日期时间空日期时间,比如 empty(ctot())。9 I0 S- ?% b8 Z7 K) t
逻辑假(.F.)( @' e% Y9 o& y( p
备注空,即没有内容。" i) O: ^: u( R) W; X
通用型空,即没有 OLE 对象。
- W  |; m" `- p图形空,没有图形。
( T+ j& H9 c/ n" z# E, m, y( `: T/ S) [; G# {! w8 c5 k
EMPTY() 不能用于确定一个对象引用变量是否为空,比如一个表单的引用变量,当表单被关闭了,但引用变量中还是包含有 null 值,即用 empty() 函数检测不为空。
" X# J1 _- B  z$ ?$ w
  x: N5 _$ p0 E/ B注意:empty()函数只能判断一个变量是否为空,而不能判断一个字符串(或者其他的值,包括函数返回值)为空。
/ R2 L1 c* _9 `7 X  s
/ d" F$ k1 |+ ^+ ]# J 代码举例如下:; q+ h* P8 F' ]$ n


  1. <?php
  2. echo "<pre>";
  3. $tokens = token_get_all('<?php empty(trim($a));?>');
  4. foreach($tokens as $t){
  5. if (is_array($t)){
  6. printf("%s \t %s \n", token_name($t[0]), htmlspecialchars($t[1]));
  7. }else{
  8. printf("\t%s\n", $t);
  9. }
  10. }
复制代码
1 C5 |- ~0 R5 V7 z
/ Q+ ?* ^4 E) s( i6 F& F6 O: f
结果输出如下:(这个如果不理解就看一下php手册附录的“List of Parser Tokens”那部分吧)
+ k5 a5 r! [/ K$ f! N" ]T_OPEN_TAG <?php
$ q; R8 {" u9 [0 t" a; ?8 F: j7 [6 o) kT_EMPTY empty , s7 ~; b, L1 i& j0 y% i4 w
(
8 I- q% {: v, ]6 l) @0 rT_STRING trim + o1 n* H# a* Z/ _( f
( . e" O& F/ v  Q$ d: u1 \2 Y: u
T_VARIABLE $a
  J2 E7 U# O2 ^8 D& Q) 7 Y4 i/ V7 |  U
) 0 d/ `: b0 f* {3 b6 g! r
T_CLOSE_TAG ?>
4 ?- J: G$ \' E7 B( y
9 _0 b6 P, y# |2 C7 s5 r  o+ B/ ]变量对应的token应该是T_VARIABLE,而trim($a)对应的是T_STRING。所以如果直接运行“empty(trim($a));”会导致运行错误:
( A$ S9 q5 M7 V+ H/ cFatal error: Can't use function return value in write context , ?2 g0 j; ~( c" A' I3 X
后来我想直接empty一个字符串会怎么样呢?结果导致的并不是运行错误,而是解析错误: , K3 M- h2 V4 {1 [
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `'$'' in ...
+ {7 f( l/ Y2 d7 M(感觉这个错误信息让人。。。) ) M" ~7 _7 D: f0 c$ @* m
查看字符串对应的token是T_CONSTANT_ENCAPSED_STRING(字符串语法)。虽然参数对于的token有所不同,但是他们都不是T_VARIABLE,应该在编译的阶段就出现错误才对,为什么。。。
1 g* H, x5 o$ t7 V- j- d, j) I" C于是也学着那些高人们查看php的源码来了。。。不过还没读懂相关的代码,呵呵,下次再分享~
( M% w( k" e! R8 `; d8 U最后重申一次,empty是语言结构,而非函数!
5 D- u9 d4 i' w/ |% w% w3 f! R(和print,echo,include,require,die等等一样都是语言结构,网上某些文章说print有返回值就说是函数是不对的)




返回列表
Namecheap
Namecheap.com - Cheap domain name registration, renewal and transfers - Free SSL Certificates - Web Hosting
互联网安全