切换风格

Wizard Sky California Sunset glow Black Cloud Beige Dragon Lavender NewYear City Snow Flowers London
收藏本站XSS平台字符串转换jsfuck
PHP TIPS[复制链接]
发表于 2013-2-21 10:50:28 | 显示全部楼层 |!read_mode!
今天看鸟哥的博客看到他整理的一些php的小tips,我捡些我觉得实用的,分享如下:
1.使用===NULL代替is_null(),因为is_null()是函数调用,调用函数意味着就要开辟新栈。
2.用FALSE表示错误, 用NULL表示不存在.
比如操作类函数,失败了就返回FALSE,查询类函数,找不到就返回NULL
3.尽量使用===,而不是==,有个原因是PHP程序员看起来比较舒服- -
4.变量先定义,再使用,使用一个未定义的变量, 比使用一个定义好的变量要慢8倍以上
5.避免使用递归,递归性能堪忧。
发表于 2013-2-21 10:54:13 | 显示全部楼层
本帖最后由 蜀山野鬼 于 2013-2-21 10:57 编辑


<?php
function f($n) {
       if ($n = 0) return 1;

      return $n * f($n - 1);
}
    //变为:
    $result = 1;

    for ($y = 1; $y < $n + 1; $y++ ) {
         $result *= $y;
    }
6.避免使用正则
<?php
  if (preg_match("!^foo_!i", "FoO_")) { }
    // 替换为:
    if (!strncasecmp("foo_", "FoO_", 4)) { }

    if (preg_match("![a8f9]!", "sometext")) { }
    // 替换为:
    if (strpbrk("a8f9", "sometext")) { }

    if (preg_match("!string!i", "text")) {}
    // 替换为:
    if (stripos("text", "string") !== false) {}
//strncasecmp,将字符串进行二进制比较,4是指定字符串的长度
//strpbrk在sometext中查找字符a8f9,找到返回找到的子字符串,失败返回false
//strpos查找text在string中首次出现的数字位置,失败返回false,stripos加个i是不区分大小写
7.用大括号括起在双引号和heredoc中的变量
例如,echo "$name[2]";
PHP不知道程序员的意图是$name . “[2]“还是$name[2],
所以建议, 都加上大括号:
<?php
    echo "{$name}[2]";
    //或者
    echo "${name}[2]";
8.这条我个人觉得很有用,switch的时候
<?php
  switch ($name) {
          case "laruence":
               ...
               break;
          case "eve":
               ...
               break;
     }
对于上面的switch, 如果$name是数字0, 那么它会满足任何一条case. 同理在in_array中也是.
正确的做法是,将$name变成你想要的类型
<?php
   switch (strval($name)) {
         case "laruence":
              ...
                   break;
         case "eve":
              ...
                   break;
    }
9.继续switch的妙用,这个我用过喔。
switch不仅仅只用来判别变量:
比如, 对于如下的一段代码:
<?php

    if($a) {
    } else if ($b) {
    } else if ($c || $d) {
    }
可以简单的改写为:
<?php
    switch (TRUE) {
         case $a:
              break;
         case $b:
              break;
         case $c:
         case $d:
              break;
    }
10.do while的妙用
<?php
         do{
              if(true) {
                   break;
              }
              if(true) {
                   break;
              }
         } while(false);
    //好过
         if(true) {
         } else if(true) {
         } else {
         }
11.查看自己的脚本用了多少内存
memory_get_usage()
单位是字节,写脚本的时候记得unset对象或者大数组
不知道哪里用了内存,就用上面的方法跟踪
12.查看自己的脚本执行了多久了,精度是秒。。
time()-$_SERVER['REQUEST_TIME']
13.floor==~~两次非运算,大数可能溢出
14.使用$_SERVER['REQUEST_TIME']代替time()
time()会引来一次函数调用, 而如果对时间的精确值要求不高, 可以使用$_SERVER['REQUEST_TIME']代替, 快很多.
15.避免使用@
<?php
@func();
//改成
$report = error_reporting(0);
func();
error_reporting($report);


发表于 2013-2-21 11:43:13 | 显示全部楼层
蜀山野鬼 发表于 2013-2-21 10:54

变量先定义,再使用,使用一个未定义的变量, 比使用一个定义好的变量要慢8倍以上

原来是这个原因,我还以为是有安全问题。
话说这个帖子很经典。感谢分享。

发表于 2013-2-22 21:57:31 | 显示全部楼层
抚菊深思 发表于 2013-2-21 11:43
变量先定义,再使用,使用一个未定义的变量, 比使用一个定义好的变量要慢8倍以上

原来是这个原因,我还 ...

八倍   确定?
发表于 2013-2-22 23:51:26 | 显示全部楼层
王子不是我 发表于 2013-2-22 21:57
八倍   确定?

八倍或以上  自己可以写个程序试一下
发表于 2013-6-6 13:19:21 | 显示全部楼层
会场经典!!!!!
发表于 2014-5-21 08:34:45 | 显示全部楼层
经典!围观了!
发表于 2014-7-4 12:32:30 | 显示全部楼层
经典!围观了!
发表于 2014-7-27 00:00:06 | 显示全部楼层
我擦,学习了,蜀山野鬼,很吊
发表于 2015-6-5 17:10:24 | 显示全部楼层
3.尽量使用===,而不是==,有个原因是PHP程序员看起来比较舒服- -  还有个 原因是 === 会判断类型,==只判断值是否相等

代码区

GMT+8, 2019-11-21 04:32

Powered by Discuz! X2

© 2001-2018 Comsenz Inc.

回顶部