php函数行数据 php处理数据( 四 )


isset比strlen快
正确和一致地格式化你的代码
不要丢失循环或if-else块的括号 。
不要写这样的代码:
if($a == true) $a_count++;
这绝对是一种浪费 。
这样写
if($a == true)
{
$a_count++;
}
不要通过吃掉语法缩短你的代码 。而是要让你的逻辑更简短 。使用具有代码高亮功能的文本编辑器 。代码高亮有助于减少错误 。
10. 使用array_map快速处理数组
比方说,你要trim一个数组的所有元素 。新手会这样做:
foreach($arr as $c = $v)
{
$arr[$c] = trim($v);
}
但它可以使用array_map变得更整洁:
$arr = array_map('trim' , $arr);
这适用于trim数组$arr的所有元素 。另一个类似的函数是array_walk 。
11.使用php过滤器验证数据
你是不是使用正则表达式来验证如电子邮件,IP地址等值?是的 , 每个人都是这样做的 。现在,让我们试试一个不同的东西,那就是过滤器 。
php过滤器扩展程序将提供简单的方法来有效验证或校验值 。
12.强制类型检查
$amount = intval( $_GET['amount'] );
$rate = (int) $_GET['rate'];
这是一种好习惯 。
13.使用set_error_handler()将Php错误写入到文件
set_error_handler()可以用来设置自定义的错误处理程序 。在文件中编写一些重要的错误用于日志是个好主意 。
14.小心处理大型数组
大型的数组或字符串,如果一个变量保存了一些规模非常大的东西,那么要小心处理 。常见错误是创建副本,然后耗尽内存,并得到内存溢出的致命错误:
$db_records_in_array_format; //This is a big array holding 1000 rows from a table each having 20 columns , every row is atleast 100 bytes , so total 1000 * 20 * 100 = 2MB$cc = $db_records_in_array_format; //2MB moresome_function($cc); //Another 2MB ?
当导入csv文件或导出表到csv文件时,上面这样的代码很常见 。
像上面这样做可能经常会由于内存限制而让脚本崩溃 。对于小规模的变量它不会出现问题,但当处理大型数组时一定要对此加以避免 。
考虑通过引用传递它们,或者将它们存储在一个类变量中:
$a = get_large_array();
pass_to_function($a);
这样一来 , 相同的变量(并非其副本)将用于该函数 。
class A{function first()
{$this-a = get_large_array();$this-pass_to_function();
}function pass_to_function()
{//process $this-a
}
}
尽快复原它们 , 这样内存就能被释放,并且脚本的其余部分就能放松 。
下面是关于如何通过引用来赋值从而节省内存的一个简单示例 。
?phpini_set('display_errors' , true);
error_reporting(E_ALL);
$a = array();for($i = 0; $i100000 ; $i++)
{
$a[$i] = 'A'.$i;
}echo 'Memory usage in MB : '. memory_get_usage() / 1000000 . '
';
$b = $a;
$b[0] = 'B';echo 'Memory usage in MB after 1st copy : '. memory_get_usage() / 1000000 . '
';
$c = $a;
$c[0] = 'B';echo 'Memory usage in MB after 2st copy : '. memory_get_usage() / 1000000 . '
';
$d = $a;
$d[0] = 'B';echo 'Memory usage in MB after 3st copy (reference) : '. memory_get_usage() / 1000000 . '
';
一个典型php 5.4机器上的输出是:
Memory usage in MB : 18.08208Memory usage in MB after 1st copy : 27.930944Memory usage in MB after 2st copy : 37.779808Memory usage in MB after 3st copy (reference) : 37.779864
因此可以看出,内存被保存在第3份通过引用的副本中 。否则,在所有普通副本中内存将被越来越多地使用 。
15.在整个脚本中使用单一的数据库连接

推荐阅读