php使用empty()函数要注意事项
从表面上看,很容易误解empty()函数是判断字符串是否为空的函数,其实并不是,我也因此吃了很多亏。
empty()函数是用来测试变量是否已经配置。若变量已存在、非空字符串或者非零,则返回 false 值;反之返回 true值。所以,当字符串的值为0时,也返回true,就是执行empty内部的语句。这就是陷阱。
代码如下 | 复制代码 |
$a=array("1"=>"ddf"); |
劝告各位,千万注意使用empty()函数。
判断字符串是否为空,可以这么判断: if ($value=="") ...
* 格式:bool empty ( mixed var )
* 功能:检查一个变量是否为空
* 返回值:
* 若变量不存在则返回 TRUE
* 若变量存在且其值为""、0、"0"、NULL、、FALSE、 array()、var $var; 以及没有任何属性的对象,则返回 TURE
* 若变量存在且值不为""、0、"0"、NULL、、FALSE、 array()、var $var; 以及没有任何属性的对象,则返回 FALSE
* 版本:PHP 3, PHP 4, PHP 5
从表面上看,很容易误解empty()函数是判断字符串是否为空的函数,其实并不是,我也因此吃了很多亏。 empty()函数是用来测试变量是否已经配置。若变量已存在、非空字符串或者非零,则返回 false 值;反之返回 true值。所以,当字符串的值为0时,也返回true,就是执行empty内部的语句。这就是陷阱。如: 假设 $value = 0; 则empty($value)=false。劝告各位,千万注意使用empty()函数。判断字符串是否为空,可以这么判断: if ($value=="") ... 格式:bool empty ( mixed var ) 功能:检查一个变量是否为空 返回值:若变量不存在则返回 TRUE 若变量存在且其值为""、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE 若变量存在且值不为""、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 FALSE 版本:PHP 3, PHP 4, PHP 5
当你使用empty检查一个函数返回的结果时会报错:Fatal error: Can't use function return value in write context
例如:
代码如下 | 复制代码 |
<?php |
到PHP手册里面查看,在empty函数描述的地方有以下文字:
Note: empty() only checks variables as anything else will result in a parse error. In other words, the following will not work: empty(trim($name)).
empty() 只检测变量,检测任何非变量的东西都将导致解析错误!
因此,我们不能拿empty来直接检测函数返回的值,上面例子的解决方案如下:
代码如下 | 复制代码 |
<?php $length = strlen('be-evil.org'); echo empty($length); |
我们最常用的是在php程序中设置
代码如下 | 复制代码 |
<?php |
这样就搞定了,如果要设置过期的话也可以在程序中实例
代码如下 | 复制代码 |
<?php |
session有过期的机制
session.gc_maxlifetime 原来session 过期是一个小概率的事件,分别使用session.gc_probability和session.gc_divisor 来确定运行session 中gc 的概率 session.gc_probability和session.gc_divisor的默认值分别为 1和100
分别为分子和分母 所以session中gc的概率运行机会为1% 。如果修改这两个值,则会降低php的效率。所以这种方法是不对的!!
所以,修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间了:(例如,我们把过期时间修改为86400秒)
代码如下 | 复制代码 |
session.gc_maxlifetime = 86400 |
然后,重启你的web服务(一般是apache)就可以了。
session“回收”何时发生?
默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的
代码如下 | 复制代码 |
#概率是gc_probability/gc_divisor |
注意1:假设这种情况gc_maxlifetime=120,如果某个session文件最后修改时间是120秒之前,那么在下一次回收(1/100的概率)发生前,这个session仍然是有效的。
注意2:如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期session文件。这时需要定时手动(或者crontab)的删除过期的session:cd /path/to/sessions; find -cmin +24 | xargs rm
我们来给大家介绍一下关于在php中无发限分类的一些用法,包括有直接无限分类数据库与数组的操作,有需要的朋友可参考参考。先看一个php与mysql数据库的无限分类
建立数据库 :
id,fid,fname(id和fid都必需是数字类型而且fid的默认值一定要设成0;
代码如下 | 复制代码 |
<?php $db=@mysql_connect("localhost","root","micronsky.net") or die("数据库连接失入"); }
$ltime=microtime(); ?> |
现在我们直接利用数组进行分页
代码如下 | 复制代码 |
/** $t[$k]['reference'] = true;
$t[$k]['reference'] = true; |
示例:
代码如下 | 复制代码 |
$data = array( array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'), array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'), array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'), array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'), array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子') ); $p = find_parent($data, 'ID', 'PARENT'); $c = find_child($data, 'ID', 'PARENT'); |
上面两种方法是将所有节点按id平摊到一个数组中,然后找到他们的 parent 或 children ,通过引用将 平摊的元素挂接到 parent 、children 下,
但被引用的元素依然存在于平摊的数组中,因此,在实际应用时,最好标记那些被引用的元素,以避免以他们为根开始遍历,导致重复。
代码如下 | 复制代码 |
foreach ($c as $key => $item) { |
递归法,PHP 数组元素被删除后,数组游标会归零,因此在遍历过程中一些已经找到 “归宿” 的元素也不得不留在数组中,无法缩减后继元素的搜索范围:
代码如下 | 复制代码 |
function _findChildren($list, $p_id){ //数据层级化, print_r(_findChildren($mylist, 0)); |
方法一:
用serialize写入,再用unserialize输出
serialize()就是将PHP中的变量如对象(object),数组(array)等等的值序列化为字符串后存储起来.序列化的字符串我们可以 存储在其他地方如数据库、Session、Cookie等,序列化的操作并不会丢失这些值的类型和结构。这样这些变量的数据就可以在PHP页面、甚至是不 同PHP程序间传递了。
而unserialize()就是把序列化的字符串转换回PHP的值。返回的是转换之后的值,可为 integer、float、string、array 或 object如果传递的字符串不可解序列化,则返回 FALSE
代码如下 | 复制代码 |
class db {
==================================== |
方法二:
用json_encode写入,再用json_decode输出
json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。
代码如下 | 复制代码 |
<?php $array = array
|
代码如下 | 复制代码 |
<?php |
执行结果:
560875,593409,325987,658308,248054,205426,375413,676243,485853,575393,115975
0.672761
由以上结果可以看到,时间花了0.6。我们把随机数范围从700000调到900000再看看执行结果
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 7200000 bytes) in /data0/htdocs/www/a.php on line 10
数组太大程序跑不下了!!
代码如下 | 复制代码 |
<?php |
执行结果:
308326,155128,280424,493174,214855,219990,482837,66329,512934,232527,386975
0.00015699999999996
由以上执行结果可以看到,时间根本可以忽略不计,我们把随机数范围从700000调到999999再看看执行结果
392281,822956,401282,176255,143076,501802,393338,546922,21836,601991,362006
0.00013600000000002
执行结果跟最大取数值设置都没有丝毫关系,还是跑的挺快!
相关文章
- 在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
总结android studio注意事项及打不开等问题解决方法
经过一段时间的使用,总结了android studio打不开等问题的6种解决方法及android studio注意事项,希望对大家有所帮助。 1 首次运行,建立好项目需要下载一些东西,如果...2016-09-20- 今天小编在这里就来给Illustrator的这一款软件的使用者们来说一说文字转曲的操作方法以及注意事项,各位想知道具体信息的使用者们,那么下面就快来跟着小编一起看看吧。...2016-09-14
- 1、检查标题。2、检查版权信息,尤其是电话号码。3、图片、文件定位问题。4、产品页面首页指向产品类别问题。5、文章页面首页指向文章类别问题。6、产品图片大小...2016-09-20
- 这篇文章主要介绍了微信小程序页面开发注意事项整理的相关资料,需要的朋友可以参考下...2017-05-22
- 站改版是每个站长必然经历的过程,也是每个网站必定会发生的状态。网站希望建设越来越好改版是不可避免的,但是网站改版对于网站优化和推广来说又是一大弊端,无论是网站结...2016-10-10
- 1、尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容。这部分时间包括下载页面中的图像、样式表、脚本、Flash等。通过减少页面中的元素可以减...2016-10-10
- php数值计算有一些结果可能并不是我们想的那样但它这样计算有自己的理论基础了,下面我们来看一篇php 总结数值计算的注意事项吧。 一:四舍五入 1.round —...2016-11-25
- 今天要讲到了是关于empty函数的用法,和等空有什么区别,以及用它来操作数组时是不是返回正常的值,有需要的朋友可以参考一下。 代码如下 复制代码 ...2016-11-25
- 匿名函数是PHP5.3引进来了,php5.3不但引进了匿名函数还有更多更好多新的特性了,下面我们一起来了解一下PHP匿名函数与注意事项详解 PHP5.2 以前:autoload, PDO 和 My...2016-11-25
- 什么是搜索结果匹配?非常简单,我们把它分成完全匹配和部分匹配。那么究竟什么是完全匹配呢?我们先来举个例子,百度搜“seo是什么”,结果中出现红色的字就是匹配项。 ...2016-10-10
- 双引号在php使用中我们通常把它定义为字符串了,但你知道双引号在使用过程中会有一些小问题呢,那么有什么问题我们来看看 PHP很多语法特性会让攻击者有机可乘,例如PH...2016-11-25
- MYSQL到ORACLE程序迁移的注意事项 2001-09 有很多应用项目, 刚起步的时候用MYSQL数据库基本上能实现各种功能需求,随...2016-11-25
- 第一:网站别急着上线 有的童鞋网站上线就是买了空间和域名之后,将程序直接丢在空间里面,然后就是哪天有问题,就随机随地的修改;这里,我自己是不赞同的,网站买了空间之后,...2016-10-10
- 本文认真总结了网站建设中我们难免犯的一些错误,希望大家做网站的时候要提高警惕。 1. “欢迎访问本站”?免了吧! 像这样没有意义的玩艺儿,包括商号...2017-07-06
- 这篇文章主要介绍了BootStrap注意事项小结(五)表单的相关资料,非常不错,具有参考借鉴价值,,需要的朋友可以参考下...2017-03-13
- 今天文章要给大家介绍的是高端网站建设规避网站设计注意事项,让大家更好的了解网站建设,还不知道的下面就一起来看看。 现在做网站不仅仅只是做网站这样简单,如何让...2017-07-06
- 今天笔者结合二十余年的ORACLE数据库应用开发和运维的经验教训,总结在使用ORACLE数据库环境中的应用开发中需要注意的一些注意事项,这些问题不但可以作为ORACLE数据库开发的注意事项,大多数也适用于常见的关系型数据库开发甚至非关系型数据开发。...2021-06-06
- ASP.NET网站部署到IIS中的关键点,本文介绍了一些ASP.NE网站在发布是需要注意事项,需要了解的朋友可以参考下...2021-09-22
- strpos() 函数返回字符串在另一个字符串中第一次出现的位置了,但是我们在按官方的手册来测试时发现一直返回false了,那么要如何来解决 STRPOS用法strpos(string,fin...2016-11-25