JSON

40+个对初学者非常有用的PHP技巧(二)(2)

字号+ 作者:H5之家 来源:H5之家 2017-04-19 15:03 我要评论( )

所以,你必须在一个文件中有很多实用函数: { //This function does a utility thing like string processing } { //This function does nother utility thing like database processing } { //This function is ..

所以,你必须在一个文件中有很多实用函数:

{ //This function does a utility thing like string processing } { //This function does nother utility thing like database processing } { //This function is ... }

自由地在应用程序中使用函数。那么你或许想要将它们包装成一个类作为静态函数:

class Utility { { } { } { } } //and call them as $a = Utility::utility_a(); $b = Utility::utility_b();

这里你可以得到的一个明显好处是,如果php有相似名称的内置函数,那么名称不会发生冲突。

从另一个角度看,你可以在相同的应用程序中保持多个版本的相同类,而不会发生任何冲突。因为它被封装了,就是这样。

19.一些傻瓜式技巧

不要写这样的代码:

if($a == true) $a_count++;

这绝对是一种浪费。

这样写

if($a == true) { $a_count++; }

不要通过吃掉语法缩短你的代码。而是要让你的逻辑更简短。

  • 使用具有代码高亮功能的文本编辑器。代码高亮有助于减少错误。
  • 20. 使用array_map快速处理数组

    比方说,你要trim一个数组的所有元素。新手会这样做:

    foreach($arr as $c => $v) { $arr[$c] = trim($v); }

    但它可以使用array_map变得更整洁:

    $arr = array_map('trim' , $arr);

    这适用于trim数组$arr的所有元素。另一个类似的函数是array_walk。

    21.使用php过滤器验证数据

    你是不是使用正则表达式来验证如电子邮件,IP地址等值?是的,每个人都是这样做的。现在,让我们试试一个不同的东西,那就是过滤器。

    php过滤器扩展程序将提供简单的方法来有效验证或校验值。

    22.强制类型检查 $amount = intval( $_GET['amount'] ); $rate = (int) $_GET['rate'];

    这是一种好习惯。

    23.使用set_error_handler()将Php错误写入到文件

    set_error_handler()可以用来设置自定义的错误处理程序。在文件中编写一些重要的错误用于日志是个好主意。

    24.小心处理大型数组

    大型的数组或字符串,如果一个变量保存了一些规模非常大的东西,那么要小心处理。常见错误是创建副本,然后耗尽内存,并得到内存溢出的致命错误:

    $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 more some_function($cc); //Another 2MB ?

    当导入csv文件或导出表到csv文件时,上面这样的代码很常见。

    像上面这样做可能经常会由于内存限制而让脚本崩溃。对于小规模的变量它不会出现问题,但当处理大型数组时一定要对此加以避免。

    考虑通过引用传递它们,或者将它们存储在一个类变量中:

    $a = get_large_array(); pass_to_function(&$a);

    这样一来,相同的变量(并非其副本)将用于该函数。

    class A { { $this->a = get_large_array(); $this->pass_to_function(); } { //process $this->a } }

    尽快复原它们,这样内存就能被释放,并且脚本的其余部分就能放松。

    下面是关于如何通过引用来赋值从而节省内存的一个简单示例。

    <?php ini_set('display_errors' , true); error_reporting(E_ALL); $a = array(); for($i = 0; $i < 100000 ; $i++) { $a[$i] = 'A'.$i; } echo 'Memory usage in MB : '. memory_get_usage() / 1000000 . '<br />'; $b = $a; $b[0] = 'B'; echo 'Memory usage in MB after 1st copy : '. memory_get_usage() / 1000000 . '<br />'; $c = $a; $c[0] = 'B'; echo 'Memory usage in MB after 2st copy : '. memory_get_usage() / 1000000 . '<br />'; $d =& $a; $d[0] = 'B'; echo 'Memory usage in MB after 3st copy (reference) : '. memory_get_usage() / 1000000 . '<br />';

    一个典型php 5.4机器上的输出是:

    Memory usage in MB : 18.08208 Memory usage in MB after 1st copy : 27.930944 Memory usage in MB after 2st copy : 37.779808 Memory usage in MB after 3st copy (reference) : 37.779864

    因此可以看出,内存被保存在第3份通过引用的副本中。否则,在所有普通副本中内存将被越来越多地使用。

    25.在整个脚本中使用单一的数据库连接

    请确保你在整个脚本使用单一的数据库连接。从一开始就打开连接,使用至结束,并在结束时关闭它。不要像这样在函数内打开连接:

    { $db = new Database(); $db->query(" cart ....."); } { $db = new Database(); $db->query("DELETE FROM cart ....."); }

    有多个连接也不好,会因为每个连接都需要时间来创建和使用更多的内存,而导致执行减缓。

    在特殊情况下。例如数据库连接,可以使用单例模式。

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • jQuery使用Ajax操作JSON格式数据说明

      jQuery使用Ajax操作JSON格式数据说明

      2017-04-18 08:52

    • Go Web开发教程

      Go Web开发教程

      2017-04-17 08:04

    • PHP+JQUERY操作JSON实例

      PHP+JQUERY操作JSON实例

      2017-04-10 10:01

    • encode处理gbk与gb2312中文乱码问题的解决方法

      encode处理gbk与gb2312中文乱码问题的解决方法

      2017-04-09 16:04

    网友点评