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




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

对于我们做php开发的来说,empty函数(注,其实empty是一个语言结构而非函数,这里说函数只是个人习惯)是再熟悉不过的一个函数了,查PHP的手册描述如下:: c( [3 h' m. z
Determine whether a variable is considered to be empty. 5 C9 U. C! |: Y9 k  O
& k9 c2 c5 s* b  h) \
EMPTY() 函数( k% \: m. L! S0 N

5 I+ V9 c# z& T8 U3 P" x确定一个表达式的值是否为空。
- g2 P0 S3 h, J7 `语法: P8 O$ }# ~7 \2 X# h+ m1 F
EMPTY(表达式); X; _% b  t; I% ]# I! G$ `! b$ m
返值类型
2 o$ b# ^% I  x9 j: a4 _5 t逻辑型8 u- C8 v! |5 j) {1 R
参数描述: b. t, T5 @6 v
表达式:被用于测试是否为空的表达式。, }9 f( ?  F9 u- ?# c, j
表达式的数据类型可以是字符、数值、日期或者逻辑型数据,各种类型数据当出现以下情况下时,该函数返回 .T.:
3 J( i2 r+ s5 h5 c
2 c' K# Z9 i0 B: N7 O  x0 s( d% |- w# {
数据类型值
1 B7 _7 R2 n% |6 J- n; g字符空字符串,或只有空格、回车符等。4 F7 \4 B5 [+ e; g. ]
数值0
/ T! c: P( g. C) n& A货币0! ?7 y) i- j) E
浮点0
; l1 G" n9 ]; X4 L整数0
# e- D7 s' I, X  }3 h& ^3 n双精度0
0 D- @4 p# j6 Q) |% @日期空日期,比如 empty(ctod(''))就返回 .T.。+ A# d, W4 I9 `& L. B6 ^: [* ^
日期时间空日期时间,比如 empty(ctot())。. T, ?6 n: |; y
逻辑假(.F.)
; }3 |: h0 l) G3 j; N8 d备注空,即没有内容。
0 }7 n& r/ K! G! p通用型空,即没有 OLE 对象。
5 s' z; G, r: J图形空,没有图形。
  P# e+ C8 \. u# }2 w% a
$ T% B# c+ i. g# a0 tEMPTY() 不能用于确定一个对象引用变量是否为空,比如一个表单的引用变量,当表单被关闭了,但引用变量中还是包含有 null 值,即用 empty() 函数检测不为空。
; k4 w7 \5 R- ]" C( ` - v9 d# O! L, Y2 b6 y
注意:empty()函数只能判断一个变量是否为空,而不能判断一个字符串(或者其他的值,包括函数返回值)为空。& Z8 p( N6 s! e  q6 ~
- \! P% k9 |7 O! d
代码举例如下:
9 [6 Q0 a6 D0 H6 Z1 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. }
复制代码

+ \# m# b0 c6 @; a8 |" i( e4 {6 w, F4 f% k# ?
结果输出如下:(这个如果不理解就看一下php手册附录的“List of Parser Tokens”那部分吧) * K! {5 V/ U4 E) A& J; q
T_OPEN_TAG <?php ! D- C1 y( g& _8 \  G  F8 \8 _
T_EMPTY empty 3 L, G/ J( L( o! y$ O& ~# \" {
(
9 f, y+ T+ d7 S. K) O, NT_STRING trim 4 o+ ~$ v  E$ K- L4 r7 b1 l7 |9 B" q6 B
( 3 ?' W" _+ i, r  @" n7 K# e
T_VARIABLE $a * d# x$ D. b8 Y; Z: [  ~- Q- q0 t! d7 K
) 2 A3 x  I$ d# ~, L5 b7 ^1 f9 a
) & p9 v" R. u) r/ V% c4 H; j+ p
T_CLOSE_TAG ?>
1 W( }& T6 q& T- _! r' q
0 S  L2 w* G" ?# Z6 g  S( p& E变量对应的token应该是T_VARIABLE,而trim($a)对应的是T_STRING。所以如果直接运行“empty(trim($a));”会导致运行错误: 5 f+ y  s7 ~& F+ x$ e7 C
Fatal error: Can't use function return value in write context
: x7 ]0 `$ o5 e后来我想直接empty一个字符串会怎么样呢?结果导致的并不是运行错误,而是解析错误:
2 m! o( G7 ^) [Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `'$'' in ...
0 ]1 q% P/ T9 W4 X! T9 r(感觉这个错误信息让人。。。) ' J/ c  @2 S2 ~" P' p6 r
查看字符串对应的token是T_CONSTANT_ENCAPSED_STRING(字符串语法)。虽然参数对于的token有所不同,但是他们都不是T_VARIABLE,应该在编译的阶段就出现错误才对,为什么。。。 8 d# C: S4 R. n1 ~
于是也学着那些高人们查看php的源码来了。。。不过还没读懂相关的代码,呵呵,下次再分享~
% O8 @. ]4 i/ f& s) s8 w1 [+ I3 w* z最后重申一次,empty是语言结构,而非函数! + f$ U9 Z5 V4 L# h. W  W
(和print,echo,include,require,die等等一样都是语言结构,网上某些文章说print有返回值就说是函数是不对的)


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