php bcadd需要哪个扩展,PHP的一些注意事项

(1)

PDOStatement::bindParam()和PDOStatement::bindValue()

这两个方法作用差不多,但是使用时建议用PDOStatement::bindValue()。这两个方法的声明如下:

boolPDOStatement::bindValue ($parameter , $value [,int$data_type= PDO::PARAM_STR ] )

boolPDOStatement::bindParam ($parameter , &$variable [,int$data_type= PDO::PARAM_STR [,int$length [,$driver_options ]]] )

可以看出bindParam方法的第二个参数是个引用,一不注意就用错了,特别是foreach循环里使用bindParam很容易出错。

(2)在php使用正则表达式时的一点注意

注意模式串的书写,例如:preg_match("/test_nick/",$content,$match);这样是匹配不到你需要的字符串的,因为模式串只会识别到“/test_nick”这个字符串,而后面"buy_nick>/"都识别不到,php会报一个警告,说第2个'/'后的'b'字符无法识别。模式串一般是用'/'包含起来,所以才会出现上面的问题。把'/'转义一下就可以解决这个问题了,即:preg_match("/test_nick/",$content,$match);

还有一个更简单的方法:

preg_match("/test_nick/",$content,$match);

改成:

preg_match("#test_nick#",$content,$match);

虽然在php的模式串经常使用“/”作为起始符,其实用其他字符也可以的,例如“#”。

(3)filter_input (int$type ,string$variable_name [, int$filter= FILTER_DEFAULT [,$options ]] )

这个函数不太好用,建议用$_GET,$_POST,$_SERVER等

(4)php代码结尾?>之后最好不要有空行,容易导致其他文件包含此文件后在输出时多了空行;或者代码结尾处不写?>

(5)数组相加和数组合并的区别

$arr = array("key"=>"value",1=>"a");

$arr2 = array("key"=>"value2",1=>"b");

var_export($arr+$arr2);

var_export(array_merge($arr,$arr2));

以上代码段的输出是:

array (

'key' => 'value',

1 => 'a',

)array (

'key' => 'value2',

0 => 'a',

1 => 'b',

)

从输出结果可以看出,

使用“+”号运算符的数组相加:如果输入的数组中相同的字符串键名或者数字键名,都不会覆盖原来的值,并且忽略

使用array_merge函数:如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面;

array_merge的另一个值得注意的地方是:如果数组是数字索引的,则键名会以连续方式重新索引。如下所示:

$arr = array("111"=>1,222=>2);

$arr2 = array("333"=>3,444=>4);

var_export(array_merge($arr,$arr2));

上面代码段的输出结果是:

array (

0 => 1,

1 => 2,

2 => 3,

3 => 4,

)

如结果所示,原来的键名“111”,222等都没有了,重新索引了!

(6)浮点数运算时建议用BCMATH扩展里的函数,BCMATH是一个支持任意精度的数学库。

BCMATH扩展里有以下常用的函数:

string bcadd ( string$left_operand ,string$right_operand [,int$scale ] ) --加法

string bcsub ( string$left_operand ,string$right_operand [,int$scale ] ) --减法

string bcmul ( string$left_operand ,string$right_operand [,int$scale ] ) --乘法

string bcdiv ( string$left_operand ,string$right_operand [,int$scale ] ) --除法

int bccomp ( string$left_operand ,string$right_operand [,int$scale ] )   --比较大小

(7)使用strtotime()函数时需要注意传递的日期不能太大

例如

var_dump(strtotime("2021-11-12 00:00:00"));

var_dump(strtotime("2061-11-12 00:00:00"));

输出结果(32位环境):

int(1636646400)

bool(false)

为什么第二个转换失败了呢?首先先看strtotime()函数的定义:

int strtotime (string $time [, int $now ] )

可以看出返回值是int,32位的环境下int最大能表示为2147483647,而自 January 1 1970 00:00:00 GMT 起到2061-11-12 00:00:00的秒数已经超过php里int的表示范围了,所以返回false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值