Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪些是有用的PHP习惯用法?_Php_Conventions - Fatal编程技术网

哪些是有用的PHP习惯用法?

哪些是有用的PHP习惯用法?,php,conventions,Php,Conventions,我希望改进我的PHP编码,我想知道其他程序员使用哪些特定于PHP的技术来提高生产率或解决PHP的局限性 一些例子: 处理名称空间的类命名约定:Part1\u Part2\u ClassName映射到文件Part1/Part2/ClassName.php if(count($arrayName))//处理$arrayName未设置或为空的情况 变量函数名,例如,$func='foo'$func($bar);//呼叫foo($bar) 我的PHP经验教会了我一些东西。举几个例子: 总是输出错误。以

我希望改进我的PHP编码,我想知道其他程序员使用哪些特定于PHP的技术来提高生产率或解决PHP的局限性

一些例子:

  • 处理名称空间的类命名约定:
    Part1\u Part2\u ClassName
    映射到文件
    Part1/Part2/ClassName.php

  • if(count($arrayName))//处理$arrayName未设置或为空的情况

  • 变量函数名,例如,
    $func='foo'$func($bar);//呼叫foo($bar)


  • 我的PHP经验教会了我一些东西。举几个例子:

    • 总是输出错误。以下是我典型项目(开发模式)的前两行:
    • 切勿使用automagic。像autoLoad这样的东西将来可能会咬你

    • 始终使用
      require\u一次
      要求依赖类。这样你就可以确定你的依赖关系是正确的

    • 使用
      if(isset($array[$key]))
      而不是
      if($array[$key])
      。如果未定义密钥,则第二个将发出警告

    • 在定义变量时(即使使用
      for
      循环),也要给变量指定详细的名称(
      $listIndex
      而不是
      $j

    • 评论,评论,评论。如果某段代码看起来不明显,请留下注释。稍后您可能需要查看它,但可能不记得它的用途

    除此之外,类、函数和变量的命名约定取决于您和您的团队。最近我一直在使用它们,因为它们对我来说是对的


    另外,在开发模式下,我设置了一个错误处理程序,只要出现一点错误(甚至警告),就会输出一个错误页面,这给了我一个提示。

    幸运的是,名称空间在5.3和6中。我强烈建议不要使用路径到类名的习惯用法。它会产生混乱的代码,而且您永远无法更改库结构。。。永远

    SPL的自动加载非常好。如果您有组织,它可以在每个文件的顶部为您保存包含和要求的典型20行块。您还可以更改代码库中的内容,只要PHP可以包含这些目录中的内容,任何内容都不会中断

    ==
    上自由使用
    ===
    。例如:

    if (array_search('needle',$array) == false) {
      // it's not there, i think...
    }
    
    如果“针”位于零键,将给出假阴性。相反:

    if (array_search('needle',$array) === false) {
      // it's not there!
    }
    

    将始终是准确的。

    请参见以下问题:。它有很多非常有用的PHP技巧,其中最好的技巧已经跃居榜首。

    在过去5年中,我一直在使用PHP(和MySQL)进行开发。最近,我开始使用一个框架()和一个坚实的javascript库(),它永远改变了我的工作方式(我认为这是一个很好的方式)

    让我想到这一点的是您的第一个要点:Zend framework正是以标准方式访问“控制器”和“操作”的

    在用不同的数据库封装和抽象问题方面,Zend_Db做得非常好。Dojo在消除不同浏览器之间javascript不一致方面做得非常好

    总的来说,学习好的OOP技术是值得的,使用(和阅读!)框架是理解OOP问题的一种非常实用的方法

    有关一些值得使用的独立工具,请参见:

    (模板引擎)
    (数据库访问抽象)

    我在PHP中做的一些事情往往是特定于PHP的

  • 用数组组合字符串

    在PHP中,很多字符串操作都很昂贵,因此我倾向于编写算法来减少离散的字符串操作次数。经典的例子是使用循环构建字符串。改为从array()开始,并在循环中进行数组连接。然后在最后内爆()。(这也巧妙地解决了尾随逗号的问题。)

  • 数组常量非常适合于实现函数的命名参数


  • 最终,您将首先通过学习一般良好的编程实践,然后再关注任何特定于PHP的内容,从而充分利用PHP。话虽如此


    为了乐趣和利益而自由申请:
  • foreach循环中的迭代器。几乎从来没有错误的时间

  • 围绕类自动加载进行设计。使用
    spl\u autoload\u register()
    ,而不是
    \u autoload()
    。为了获得额外的积分,让它递归地扫描目录树,然后随意地将您的类重新组织为更具逻辑性的目录结构

  • 到处都是打字提示。对标量使用断言

    function f(SomeClass $x, array $y, $z) {
        assert(is_bool($z))
    }
    
  • 输出HTML以外的内容

    header('Content-type: text/xml'); // or text/css, application/pdf, or...
    
  • 学习使用异常。编写一个错误处理程序,将错误转换为异常

  • define()
    全局常量替换为类常量

  • 用适当的
    日期
    类替换Unix时间戳

  • 在长函数中,使用完变量后,
    unset()


  • 愉快地使用:
  • 像数组一样循环对象的数据成员。对他们没有被宣布为私人感到内疚。这不是像Python或Lisp这样的异教语言

  • 使用输出缓冲区组装长字符串

    ob_start();
    echo "whatever\n";
    debug_print_backtrace();
    $s = ob_get_clean();
    

  • 除非绝对必要,否则不要这样做,除非你真的讨厌维护程序员和你自己:
  • 神奇的方法(
    \u获取
    \u设置
    \u调用

  • extract()

  • 结构化数组--使用对象

  • 在使用变量之前声明变量
  • 启用通知,如果您确实希望严格执行错误报告。它可以防止大量错误和代码气味:
    ini\u集('display\u errors',1);错误报告(E_全部和&$严格)
  • 远离全局变量
  • 保持尽可能多的功能简短。它是
    ob_start();
    echo "whatever\n";
    debug_print_backtrace();
    $s = ob_get_clean();