PHP类型转换的面试题与答案解析,PHP入门基础之php代码写法

 1 $a =  0; 
 2 $b="0"; 
 3 $c= ''; 
 4 $d= null; 
 5 $e = false;
 6  
 7 echo "5个变量-原始测试类型";
 8     var_dump($a);//int 0
 9     var_dump($b);//string '0'
10     var_dump($c);//string ''
11     var_dump($d);//null
12     var_dump($e);//boolean false
13  
14 echo "<h4>empty测试</h4>";
15     var_dump(empty($a));//true
16     var_dump(empty($b));//true
17     var_dump(empty($c));//true
18     var_dump(empty($d));//true
19     var_dump(empty($e));//true
20  
21 echo "<hr>";
22     var_dump(isset($a));//true
23     var_dump(isset($b));//true
24     var_dump(isset($c));//true
25     var_dump(isset($d));//【false】 见结论一
26     var_dump(isset($e));//true
27  
28 echo "<h4>(==)双等式测试</h4>";
29     var_dump($a == $b);//true
30     var_dump($a == $c);//true
31     var_dump($a == $d);//true
32     var_dump($a == $e);//true !!
33  
34     var_dump($b == $c);//【false】见结论二
35     var_dump($b == $d);//【false】见结论二
36     var_dump($b == $e);//true
37  
38     var_dump($c == $d);//true
39     var_dump($c == $e);//true
40  
41 echo "<h4>(===)三等式测试</h4>";
42     var_dump($a === $b);//false
43     var_dump($a === $c);//false
44     var_dump($a === $d);//false
45     var_dump($a === $e);//false
46  
47     var_dump($b === $c);//false
48     var_dump($b === $d);//false
49     var_dump($b === $e);//false
50  
51     var_dump($c === $d);//false
52     var_dump($c === $e);//false

一.在web页面嵌入PHP代码的二种风格 引进使用正规风格或简捷风格

不久前在为商家面试新人,平时会问到的一道标题就是PHP类型转换的值,例如:
 
var_dump((int)true);
var_dump((string)true);
var_dump((string)false);
var_dump((bool)”1″);
var_dump((bool)”0″);
var_dump((bool)””);
var_dump((bool)”false”);

PHP函数:empty() 和 isset()
都是判定变量是或不是已计划的函数,不过使用的时候如故存在一定的界别。

总结:

复制代码 代码如下:

我纪念中最早见到那道标题是在英极的PHP高级开发工程师岗位的笔试题里面,看似很基础,不过依然可以难住不少PHPer。先来看一下运行结果:

empty()
函数用来测试变量是或不是业已配备。若变量已存在、非空字符串或者非零,则赶回
false 值;反之重临 true。

对于 【0‘0’null
false】五系列型

<?php
//标准风格
echo ‘Hello World!’;
?>
<?
//简短风格
echo ‘Hello World!’;
?>
<script language=”php”>
//script风格
echo ‘Hello World!’;
</script>

int(1)
string(1) “1”
string(0) “”
bool(true)
bool(false)
bool(false)
bool(true)

isset() 函数用来测试变量是不是已经安排。若变量已存在则赶回 true
值。其余情状再次来到 false 值。

empty操作以上多个变量,都回到false

二.代码注释的各类办法

对此半数以上人来说,第1、2、4行平时是一贯不难题的。可是怎么false转换为字符串是空字符串呢?在拍卖请求值时,平日会传一个字符串类型的false,可是“false”(字符串)并非false(布尔),那有点令人猜疑了。

从地点七个函数的定义可以看到 empty() 和 isset()
的共同点是:都得以判美赞臣个变量是不是为空,都回到boolean类型,即true或false。而它们最明确区其余地点就是:重返的布尔值刚好是相反。

强等于(===)比较都为false,同强语言结果(多少个等号相比不但要比较值,而且要相比类型)

复制代码 代码如下:

为何会如此吧?

除此以外,他们之间最大的分别就是对于0的判断,若用empty判断会以为是空,用isset则觉得不为空,举个例子:

但对于(==)相比,需要专注string类型,涉及到底层结构与类型转换

<?php
//单行注释
/*
* 多行注释
*/
#shell风格注释
/**
* PHPdoc风格注释
*/
?>

至于那个难题,大家从PHP内核入手,看看在类型转换时系统里面到底发生了何等。

<?php

 

三.向浏览器输出字符串的二种方法

第一补充部分有关PHP弱类型达成格局的背景知识。PHP解释器是应用C语言写成的,当然最后对变量的拍卖,也会利用C语言构造数据结构来兑现。在Zend引擎中,一个PHP变量对应的门类是zval。

          var $a=0;

结论一:关于变量类型的驾驭

复制代码 代码如下:

打开Zend/zend_types.h文件,大家得以观看zval类型的概念,php-5.5.23版本大致在第55行左右:

           //empty($a)返回true

1.null为不设有之意:php底层的zval空间里(结构见下方)没有存其value值,只存储了一个type标志其
IS_NULL(所以解释了 empty(null)=true,isset(null)=false
,isset(”)=true)

<?php
/*
* echo函数的功用:向浏览器输出字符串
* 函数重返值:void
*/
echo ‘echo function!’;
echo(‘<br/>’);
/*
* echo函数的职能:向浏览器输出字符串
* 函数重回值:int
*/
print ‘print function’;
echo(‘<br/>’);
echo print ‘echo value of print function. ‘;
echo(‘<br/>’);
/*
* printf函数的功力:向浏览器输出字符串
* 函数重返值:所打印字符串的长短
*/
printf(“a weekend have %d days”,7);
echo(‘<br/>’);
echo printf(“a weekend have %d days”,7);
echo(‘<br/>’);
/*
* sprintf函数的效应:把字符串保存到内存中
* 函数再次来到值:保存的字符串本身
*/
PHP类型转换的面试题与答案解析,PHP入门基础之php代码写法。sprintf(‘sprintf function’);
echo(‘<br/>’);
echo sprintf(‘sprintf function’);
echo(‘<br/>’);
?>

typedef struct _zval_struct zval;

           if(empty($a)){

2.【0 ; ‘0’ ; ” www.5929.com,;
false
】:那七个为存在,php底层是开拓zval空间存储,有value,有type

出口结果:
echo function test!
print function test.
print function test. 1
a weekend have 7 days
a weekend have 7 days. 23
sprintf function test
常用类型提示符

如此我们发现,zval其实是一个名为_zval_struct的构造体类型,我们在Zend/zend.h文件中找到这一个结构体的概念,大致在320行左右发端:

                 echo “判断结果是空”

 

类型

描述

%b

整数,显示为二进制

%c

整数,显示为ASCII字符

%d

整数,显示为有符号十进制数

%f

浮点数,显示为浮点数

%o

整数,显示为八进制数

%s

字符串,显示为字符串

%u

整数,显示为无符号十进制数

%x

整数,显示为小写的十六进制数

%X

整数,显示为大写的十六进制数

 
typedef union _zvalue_value {
long lval; /* long value */
double dval; /* double value */
struct {
char *val;
int len;
} str;
HashTable *ht; /* hash table value */
zend_object_value obj;
} zvalue_value;
 
struct _zval_struct {
/* Variable information */
zvalue_value value; /* value */
zend_uint refcount__gc;
zend_uchar type; /* active type */
zend_uchar is_ref__gc;
};

           }

结论二:

四.标识符与变量 1.标识符的主导规则:
1) 标识符可以是轻易长度,而且可以由其余字母、数字、下划线组成。
2) 标识符不可以以数字开始。
3) 在PHP中,标识符是分别轻重缓急写的。
4) 一个变量名称可以与一个函数名称相同。
2.变量赋值:

我们可以看来,_zval_struct中蕴藏三个首要的积极分子,一个是zvalue_value类型的value,一个是zend_uchar类型的type。注意zvalue_value类型是一个联合体,它用来囤积一个PHP变量的值的音信。(假诺你忘记了怎么样是联合体,我来解释一下。联合体类似结构体,可是联合体的中的成员,存储时有且不得不有一个,而且联合体占用的上空是联合体中长度最长的要命成员,那样做是为了节约内存的选择。)在zvalue_value中,包括了long、double、struct、HashTable、zend_object_value多少个类型的积极分子。他们分别用来储存PHP变量差别品类的值:
C类型  PHP类型
long  bool
int
resource
double  float
struct  string
HashTable  array
zend_object_value  object

          //isset($a)返回true

1、string ‘0’与 string  不等于,(想转手就精晓,同序列相比【1个长度】的字符串怎么可能
等于 【0个长度】 的字符串)

复制代码 代码如下:

看样子那么些结构体之后,想必也就知晓了常问的例如PHP中int类型的取值范围,以及php中strlen的时刻复杂度之类的标题。

           if(isset($a)){

2、int 0 却和 string 
空相等,(非同类形比较,php会做类型转换)

<?php
$sum = 0;
$total = 1.22;
$sum = $total;
echo $sum; //1.22
?>

不言而喻,PHP的变量类型转换,或者说是弱类型落成,本质上是落到实处zval类型在分歧系列之间的变换。除了成功zvalue_value的数值转换,还须求将_zval_struct中的type设置成当前变量的type类型。在Zend引擎中落到实处了convert_to_*一而再串函数落成这一变换,大家在Zend/zend_operators.c中得以见见这个转换函数,在大约511行左右,可以找到转换为布尔类型的函数:

                 echo “判断结果不是空”

3、string ‘0’null 不相等,int 0
null
相等

3.变量的数据类型:
着力数据类型

 
ZEND_API void convert_to_boolean(zval *op) /* {{{ */
{
int tmp;
 
PHP类型转换的面试题与答案解析,PHP入门基础之php代码写法。switch (Z_TYPE_P(op)) {
case IS_BOOL:
break;
case IS_NULL:
Z_LVAL_P(op) = 0;
break;
case IS_RESOURCE: {
TSRMLS_FETCH();
 
zend_list_delete(Z_LVAL_P(op));
}
/* break missing intentionally */
case IS_LONG:
Z_LVAL_P(op) = (Z_LVAL_P(op) ? 1 : 0);
break;
case IS_DOUBLE:
Z_LVAL_P(op) = (Z_DVAL_P(op) ? 1 : 0);
break;
case IS_STRING:
{
char *strval = Z_STRVAL_P(op);
 
if (Z_STRLEN_P(op) == 0
|| (Z_STRLEN_P(op)==1 && Z_STRVAL_P(op)[0]==’0′)) {
Z_LVAL_P(op) = 0;
} else {
Z_LVAL_P(op) = 1;
}
STR_FREE(strval);
}
break;
case IS_ARRAY:
tmp = (zend_hash_num_elements(Z_ARRVAL_P(op))?1:0);
zval_dtor(op);
Z_LVAL_P(op) = tmp;
break;
case IS_OBJECT:
{
zend_bool retval = 1;
TSRMLS_FETCH();
 
convert_object_to_type(op, IS_BOOL, convert_to_boolean);
 
if (Z_TYPE_P(op) == IS_BOOL) {
return;
}
 
zval_dtor(op);
ZVAL_BOOL(op, retval);
break;
}
default:
zval_dtor(op);
Z_LVAL_P(op) = 0;
break;
}
Z_TYPE_P(op) = IS_BOOL;
}
/* }}} */

           }
 ?>

 

类型

名称

Integer

整数

Float

单精度浮点数

Double

又精度浮点数

String

字符串

Boolean

布尔

Array

数组

Object

对象

case
IS_STRING那段代码即是将一个字符串类型变量转换为布尔型的操作。可以看来,唯有空字符串,或者字符串长度为1,并且此字符为0时,字符串的布尔值才为1,也就是true,其余为0,也就是false。

empty()
判断一个变量是还是不是为“空”,同时还会检测变量是或不是为空、为零。当一个变量值为0,empty()
认为那么些变量同等于空,即一对一于尚未设置。而isset()
判断一个变量是不是已经安装,即使变量值为空,为零也算已设置。

小说转自:

4.类型强度
PHP是动态语言,是一种相当弱的连串语言,在程序运行时,可以动态的改动变量的品类。
5.类型转换:
隐式类型转换:

一样的,我们也就驾驭了布尔值怎么样转移为字符串的,可以从_convert_to_string函数的兑现中打探。

一、举例表达

复制代码 代码如下:

接近简单并且基础的PHP难点,究其根源是对PHP完毕机制的把握。个人认为,那道题也不失为鉴别PHPer知识边界的一道好难题。

A.如何判断一个变量是不是定义?

<?php
$sum = 0;
$total = 1.22;
$sum = $total;
echo gettype ( $sum );//double
?>

<?php
// 要是不存在$test 变量
 
$isset = isset($test) ? “test is define!” : “test is undefine!”;
echo “isset:$isset”, ‘<br />’;

显式类型转换:

$empty = !empty($test) ? “test is define!” : “test is undefine!”;
echo “empty:$empty”, ‘<br />’;
 
$is_null = is_null($test) ? “test is define!” : “test is undefine!”;
echo “is_null:$is_null”;
测试结果是:

复制代码 代码如下:

isset:test is undefine!
empty:test is undefine!
is_null:test is define!
结果注解:
empty,isset首先都会检查变量是或不是留存,然后对变量值举办检测。而is_null
只是直接检查变量值,是不是为null,因而一旦变量未定义就会冒出错误!

<?php
$sum = 100;
$total = ( string ) $sum;
echo gettype ( $sum );//string
?>

B、看下各自接收的参数是怎么?

利用settype()函数举办类型转换,重回值1表示成功,空表示退步。

isset函数参数:

复制代码 代码如下:

<?php
$test=100;
echo isset($test),isset(100),$isset($b=100);
输出:

<?php
$sum = 58;
echo settype ( $sum, “float” );
echo $sum; //58
echo gettype ( $sum ); //double
?>

<br />
<b>Parse error</b>:  parse error, unexpected T_LNUMBER,
expecting T_STRING or T_VARIABLE or ‘$’ in
<b>PHPDocument3</b> on line <b>3</b><br
/>
empty函数参数:

6.检测变量的函数:

<?php
$test=100;
echo empty($test),empty(100),empty($b=100);
输出:

函数

功能

返回值

Gettype()

获取变量的类型

基本数据类型中的其中一种

Settype()

 设置变量的类型

Bool(1:true 0:false(or ”))

Isset()

用来判断一个变量是否存在

Bool

Unset()

释放给定的变量

Void

Empty()

检测一个变量的值是否为空

Bool

is_int() is_integer()

检测变量是否是整数

Bool

Is_string()

检测变量是否是字符串

bool

Is_numeric

检测变量是否为数字或数字字符串

bool

Is_null

检测变量是否为 NULL

bool

Intval()

获取变量的整数值

int

<br />
<b>Parse error</b>:  parse error, unexpected T_LNUMBER,
expecting T_STRING or T_VARIABLE or ‘$’ in
<b>PHPDocument3</b> on line <b>3</b><br
/>
is_null函数参数:

Isset()的骨干选用

<?php
$test=100;
echo is_null($test),is_null(100),is_null($b=100);
运行结果:没有别的不当。

复制代码 代码如下:

结果声明:
empty,isset输入参数必须是一个变量(PHP变量是以$字符开首的),而is_null输入参数只要是能够有再次回到值就足以(常量,变量,表达式等)。在PHP手册里面,对于他们分析是:empty,isset
是一个言语结构而非函数,由此它无法被变量函数调用。

<?php
$a = 10;
echo isset ( $a );//1
?>
<?php
echo isset ( $b );//”
?>

二、概括统计isset,empty,is_null区别:

Usset()的基本使用

empty()

复制代码 代码如下:

比方 变量 是非空或非零的值,则 empty() 重临FALSE。换句话说,””、0、”0″、NULL、FALSE、array()、var
$var、未定义,以及从未任何性质的目的都将被认为是空的,如果 var
为空,则赶回 TRUE。

<?php
$a = 10;
unset($a);
echo isset ( $a );//”
?>

isset()

Empty()的主导使用

如若 变量 存在且值非NULL,则赶回 TRUE,否则再次来到FALSE(包含未定义)。变量值设置为:null,再次来到也是false;unset一个变量后,变量被撤回了。注意,isset对于NULL值变量,特殊处理。

复制代码 代码如下:

is_null()

<?php
$a= 5;
$b =1;
$c = 0;
$d = “”;
$e = array();
$f = null;
$g = “0”;
$h = false;
echo empty($a);//”(false)
echo ‘<br/>’;
echo empty($b);//”(false)
echo ‘<br/>’;
echo empty($c);//1(true)
echo ‘<br/>’;
echo empty($d);//1(true)
echo ‘<br/>’;
echo empty($e);//1(true)
echo ‘<br/>’;
echo empty($f);//1(true)
echo ‘<br/>’;
echo empty($g);//1(true)
echo ‘<br/>’;
echo empty($h);//1(true)
echo ‘<br/>’;
echo empty($f);//1(true)
?>

检测传入值【值,变量,表明式】是还是不是是null,唯有一个变量定义了,且它的值是
null ,它才回来TRUE . 其他都回到 FALSE 【未定义变量传入后会出错!】。

is_int()的大旨选拔。类似的函数有:is_float()、is_double()、is_string()、is_bool()、is_array()、is_null()、is_long()、is_object()、is_resource()、is_numeric()、is_real()等。

 

复制代码 代码如下:

1、isset()对PHP参数判断

<?php
$a = 11;
$b = 1.23;
$c = 3.1415926;
$d = “hello”;
$e = false;
$f = array();
$g = null;
echo is_int($a);//1
echo ‘<br/>’;
echo is_float($b);//1
echo ‘<br/>’;
echo is_double($c);//1
echo ‘<br/>’;
echo is_string($d);//1
echo ‘<br/>’;
echo is_bool($e);//1
echo ‘<br/>’;
echo is_array($f);//1
echo ‘<br/>’;
echo is_null($g);//1
echo ‘<br/>’;
echo is_numeric($a);//1
?>

您可以采用 PHP isset()
来判断一个参数是或不是被定义,注意如若该参数为空,或者”\n”(NULL字节)使用
PHP isset() 判断之后,都会为TRUE。

Intval()函数的为主接纳。类似的函数为:floatval()、strval()

<?php
$var = ”; // 那里伊始参数$var=”;
$var0 = FALSE // 那里初叶参数为布尔FALSE
$var2 = NULL;  // 那里定义$var2=NULL,用isset()判断重临FALSE
$var3 = “\0”; //
这里是NULL字节,用isset()判断,返回TRUE,不同于NULL常数
$var4 = “www.qianyunlai.com”; // 那里定义会在上边给unset掉

复制代码 代码如下:

if (isset($var)) {
  echo ‘参数$var已经设定,且值不为NULL’;
}
// 参数$var已经赋值,而且值为$var=”,所以会输出“参数$var已经设定”

<?php
$a = 22.23;
echo gettype($a);//double
echo ‘<br/>’;
$b = intval($a);//类型转换后不改动$a原来的类型
echo gettype($a);//double
echo ‘<br/>’;
?>
<?php
$a = 22.23;
echo gettype($a);//double
echo ‘<br/>’;
settype($a,”integer”);//类型转换后会改变$aa原来的品种
echo gettype($a);//integer
echo ‘<br/>’;
?>

if (isset($var0)) {
  echo ‘参数$var0已经设定,且值不为NULL’;
}
// 参数$var0已经赋值,而且值为$var=FALSE,所以会输出“参数$var已经设定”

7.变量的功用域

if (isset($vget)) {
  echo ‘参数$vget已经设定,且值不为NULL’;
}
// 参数$vget根本就没有被提及过,isset($vget)再次来到FALSE,不会输出

极品全局变量

if (isset($var2)) {
  echo ‘参数$var2已经设定,且值不为NULL’;
}
//
那里是$var2固然被设定了,不过$var2=NULL,所以isset($var2)重临FALSE,不会输出

变量名

作用

$GLOBALS

所有全局变量数组

$_SERVER

服务器环境变量数组

$_GET

通过GET方式传递给该脚本的变量数组

$_POST

通过POST方式传递给该脚本的变量数组

$_COOKIE

COOKIE变量数组

$_FILES

与文件上传相关的变量数组

$_ENV

环境变量数组

$_REQUEST

所用用户输入的变量数组

$_SESSION

会话变量数组

if (isset($var3)) {
  echo ‘参数$var3已经设定,且值不为NULL’;
}
// 参数$var3 虽然\0
就是表示NULL字节,但是这么些不是常数NULL,所以$isset(“\0”)返回TRUE,会输出

8.常量
即使被定义之后,就不可以重新转移。

unset($var4); // 那里给$var4 释放掉了
if (isset($var4)) {
  echo ‘参数$var4已经设定,且值不为NULL’;
}
// 纵然起首已经定义$var4,而且还不为NULL,不过后来又给 unset()
掉了,所以不会输出。
?>
2、PHP isset() 对数组的判定

复制代码 代码如下:

在运用PHP数组的时候,需求判定数组的某部值是或不是留存也可以动用 PHP isset()
函数。

<?php
define(“TOTAL”,100);
echo TOTAL;//100
echo ‘<br/>’;
define(“TOTAL”,200);
echo TOTAL;//100
?>

<?php
$V => array(
  ‘aa’ => ‘www.qianyunlai.com’,
  ‘bb’ => array(
    ‘file’ => ‘file.qianyunlai.com’,
    ‘img’ => ‘img.qianyunlai.com’,
    ‘hosts’ => array(
      ‘blog’ => ‘blog.qianyunlai.com’,
      ‘res’ => ‘res.qianyunlai.com’
    )
  )
);

翻看PHP预订义的常量的不二法门

// var_dump用于出口TRUE 或 FALSE

复制代码 代码如下:

var_dump(isset($V[‘aa’]));
// 数组$V 的$V[‘aa’] =’www.qianyunlai.com’已经存在,所以输出TRUE

<?php
phpinfo();
?>

var_dump(isset($V[‘bb’][‘file’]));
//$V[‘bb’][‘file’] = ‘file.qianyunlai.com’ 所以输出 TRUE

引用PHP预约义常量的措施

var_dump(isset($V[‘bb’][‘hosts’][‘blog’]));
// $V[‘bb’][‘hosts’][‘blog’]=’blog.qianyunlai.com’所以输出TRUE

复制代码 代码如下:

var_dump(isset($V[‘bb’][‘hosts’][‘sh’]));
//按照数组,根本就从未设定该项,所以输出FALSE
?>
3、PHP isset()对参数判断

<?php
echo $_SERVER[“SERVER_NAME”];//localhost
echo ‘<br/>’;
echo $_SERVER[“SERVER_PORT”];//8090
echo ‘<br/>’;
echo $_SERVER[“DOCUMENT_ROOT”];//D:/AppServ/www
echo ‘<br/>’;
?>

诸多时候我们要求对多少个参数举办判断,可以动用isset($A)&&isset($B)……来判定那个参数是还是不是都已经设定了,而且都不为NULL,对此您可以应用isset()多参数来判断是否都设定了。

五.走访表单变量
广大的二种艺术

<?php
isset($v1)&&isset($v2)&&isset($v3)……
// 等价于
isset($v1,$v2,$v3……)
?>
应用isset()判断多少个参数,必要具备参数都被设定,且不为NULL,只要其中有一个参数没有被设定过,或者为NULL,那么所有isset()就为FALSE。

复制代码 代码如下:

4、PHP isset()判断$_POST、$_GET、$_REQUEST等值

<?php
echo $username;//简短风格,简单与变量名混淆,不引进应用。
echo ‘<br/>’;
echo $_POST[‘username’];//中等风格,4.1.0版后帮助,推荐
echo ‘<br/>’;
echo
$HTTP_POST_VARS[‘username’];//冗长风格,已不合时宜,未来恐怕会被去除
?>

用isset() 或者empty() 判断通过表单传递来的参数是isset() 最普遍的用法。

Posttest.html

if (isset($_POST[‘from’]) && ‘qianyunlai.com’ == $_POST[‘from’])
{
  echo ‘网站通过POST传递的源于是qianyunlai.com’;
}
据悉地点大家可以用isset判断多参数,在对表单传递来的值举办判定就最便利了。

复制代码 代码如下:

<?php
// 表单传递来user用户名和 pass必须同时存在才能实施
if (isset($_POST[‘user’], $_POST[‘pass’])) {
  $user=$_POST[‘user’];
  $pass=$_POST[‘pass’];
  echo ‘您填写的用户名是:’,$user,’;密码是:’,$pass;

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“;
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html;
charset=UTF-8″>
<title>获取表单数据的方法</title>
</head>
<body>
<form method=”POST” action=”demo10.php”>
username:<input type=”text” name=”username” />
<input type=”submit” value=”submit” />
</form>
</body>
</html>

}
?>
5、PHP isset($var{字符串长度}) 判断字符串长度

六.字符串连接用.

用PHP判断字符串是不是留存或者判断字符串长度是还是不是超越某一数字依旧判断字符串长度是不是为空一般选取strlen(),然而实际上选拔isset()质量更优越。

复制代码 代码如下:

<?php
// 三元,等同于 if (isset($_POST[‘from’])) { $var =
$_POST[‘from’];} else {$weiget = ”;}

<?php
echo “the student name is :”.$_POST[‘username’];
echo “<br/>”;
echo “welcome to “.”school”;
?>

$var = isset($_POST[‘from’]) ? $_POST[‘from’] : ”;

// 判断$var存在,且字符串长度大于0
/* 菜鸟写法 
if (strlen($var) > 0) {
  echo ‘$var子符长度当先0’;
}
*/

// 质量更优越的写法,判断$var第1个字符是还是不是设定了
if (isset($var{1})) {
  echo ‘$var字符长度当先0’;
}
?>
6、PHP isset() 与 PHP empty() 的区别

多多少人都拿 PHP isset() 和 PHP empty()举办相比较,然则得出的结论一般都是
PHP isset() 判断这一个参数是还是不是留存,且不为NULL,即选择 PHP isset()
判断空值、0、布尔值(TRUE/FALSE)都是TRUE,而且 PHP isset()
仍可以对数组举行判断。

而 PHP
empty(),若变量不设有,或者变量存在且其值为””、0、”0″、NULL、FALSE、array()、var
$var; 以及从未其他性质的对象,则赶回 TURE。

那么!empty(),就是变量存在,且值不为””、0、”0″、NULL、FALSE、array()以及var
$var;

<?php
// $_POST[‘from’]
传递来的是一个网址,据此大家得以了然,那些值一定不为0和布尔,只好是字符串,或者空字符串,或者不存在

/* 上边写法比较宽泛,但是急需看清五遍
if (isset($_POST[‘from’]) && isset($_POST[‘from’]{1})) {
  echo ‘$weigeti子符长度当先0’;
}
*/

// 下面用!empty() 只要求判定五次,越发火速
if (!empty($_POST[‘from’])) {
  echo ‘传递的from存在且不为空、0等’;
}
?>
即使奇迹用!empty()判断传递来的$_GET、$_POST
品质更优越,然而并不是能完全代替isset()使用,若是传递的值允许包蕴0、’0’或者空的时候,就不能使用!empty()判断了,否则就是传递过来了0、’0’都会被用作没有传递任何值过来。

而对此可以规定传递过来的值一定不为0、’0’、空的时候,如用户名、密码等,使用!empty()
质量更优越。

 

填补:PHP 判断常量,变量和函数是或不是存在

if (defined(‘CONST_NAME’)) {
    //do something
}

变量检测则是利用isset,注意变量未注脚或表明时赋值为NULL,isset均再次来到FALSE,如:
 

if (isset($var_name)) {
    //do something
}

函数检测用function_exists,注意待检测的函数名也亟需动用引号,如:

if (function_exists(‘fun_name’)) {
 fun_name();
}
 

<?php
/* 判断常量是或不是留存*/
if (defined(‘MYCONSTANT’)) {
echo MYCONSTANT;
}
//判断变量是或不是存在
if (isset($myvar)) {
echo “存在变量$myvar.”;
}
//判断函数是或不是存在
if (function_exists(‘imap_open’)) {
echo “存在函数imag_openn”;
} else {
echo “函数imag_open不存在n”;
}
?>
 
function_exists判断函数是还是不是留存

<?php
if (function_exists(‘test_func’)) {
    echo “函数test_func存在”;
} else {
    echo “函数test_func不存在”;
}
?>
 
filter_has_var函数
filter_has_var() 函数检查是或不是留存指定输入类型的变量。
若成功,则赶回 true,否则再次回到 false。

<?php
if(!filter_has_var(INPUT_GET, “name”))
 {
 echo(“Input type does not exist”);
 }
else
 {
 echo(“Input type exists”);
 }
?> 

输出为. Input type exists

别的变量处理函数:
gettype:取得变量的种类。
intval:变量转成整数类型。
doubleval:变量转成倍浮点数类型。
empty:判断变量是或不是已布局。
is_array:判断变量类型是或不是为数组类型。
is_double:判断变量类型是或不是为倍浮点数类型。
is_float:判断变量类型是或不是为浮点数类型。
is_int:判断变量类型是不是为整数类型。
is_integer:判断变量类型是还是不是为长整数类型。
is_long:判断变量类型是还是不是为长整数类型。
is_object:判断变量类型是或不是为类品种。
is_real:判断变量类型是还是不是为实数类型。
is_string:判断变量类型是否为字符串类型。
isset:判断变量是不是已计划。
settype:配置变量类型。
strval:将变量转成字符串类型。
unset:删除变量。

Leave a Comment.