Maison >développement back-end >tutoriel php >Analyse des spécifications PHP

Analyse des spécifications PHP

小云云
小云云original
2018-03-05 11:43:581833parcourir

Si vous voulez écrire un bon programme PHP, vous devez savoir ce que sont les spécifications PHP. Cet article partage principalement avec vous l'analyse des spécifications PHP, dans l'espoir de vous aider.

<?php
/**
 * 符合psr-1,2的编程实例
 *
 * @author GreenForestQuan
 */
namespace Standard; // 顶部命名空间
// 空一行
use Test\TestClass;//use引入类
/**
 * 类描述
 *
 * 类名必须大写开头驼峰.
 */
abstract class StandardExample // {}必须换行
{
  /**
   *  常量描述.
   *
   * @var string
   */
  const THIS_IS_A_CONST = &#39;&#39;; // 常量全部大写下划线分割
  /**
   * 属性描述.
   *
   * @var string
   */
  public $nameTest = &#39;&#39;; // 属性名称建议开头小写驼峰
                       // 成员属性必须添加public(不能省略), private, protected修饰符
  /**
   * 属性描述.
   *
   * @var string
   */
  private $_privateNameTest = &#39;&#39;; // 类私有成员属性,【个人建议】下划线小写开头驼峰
  /**
   * 构造函数.
   *
   * 构造函数描述
   *
   * @param  string $value 形参名称/描述
   */
  public function __construct($value = &#39;&#39;)// 成员方法必须添加public(不能省略), private, protected修饰符
  {// {}必须换行
    $this->nameTest = new TestClass();
    // 链式操作
    $this->nameTest->functionOne()
                   ->functionTwo()
                   ->functionThree();
    // 一段代码逻辑执行完毕 换行
    // code...
  }
  /**
   * 成员方法名称.
   *
   * 成员方法描述
   *
   * @param  string $value 形参名称/描述
   *
   * @return 返回值类型        返回值描述
   * 返回值类型:string,array,object,mixed(多种,不确定的),void(无返回值)
   */
  public function testFunction($value = '')// 成员方法必须小写开头驼峰
  {
      // code...
  }
  /**
   * 成员方法名称.
   *
   * 成员方法描述
   *
   * @param  string $value 形参名称/描述
   *
   * @return 返回值类型        返回值描述
   */
  private function _privateTestFunction($value = '')// 私有成员方法【个人建议】下划线小写开头驼峰
  {
      // code...
  }
  /**
   * 成员方法名称.
   *
   * 成员方法描述
   *
   * @param  string $value 形参名称/描述
   *
   * @return 返回值类型        返回值描述
   */
  public static function staticFunction($value = '')// static位于修饰符之后
  {
    // code...
  }
  /**
   * 成员方法名称.
   *
   * 成员方法描述
   *
   * @param  string $value 形参名称/描述
   *
   * @return 返回值类型        返回值描述
   */
  abstract public function abstractFunction($value = ''); // abstract位于修饰符之前
  /**
   * 成员方法名称.
   *
   * 成员方法描述
   *
   * @param  string $value 形参名称/描述
   *
   * @return 返回值类型        返回值描述
   */
  final public function finalFunction($value = '')// final位于修饰符之前
  {
    // code...
  }
  /**
   * 成员方法名称.
   *
   * 成员方法描述
   *
   * @param  string $valueOne 形参名称/描述
   * @param  string $valueTwo 形参名称/描述
   * @param  string $valueThree 形参名称/描述
   * @param  string $valueFour 形参名称/描述
   * @param  string $valueFive 形参名称/描述
   * @param  string $valueSix 形参名称/描述
   *
   * @return 返回值类型        返回值描述
   */
  public function tooLangFunction(
    $valueOne   = '', // 变量命名可小写开头驼峰或者下划线命名,个人那习惯,据说下划线可读性好
    $valueTwo   = '',
    $valueThree = '',
    $valueFour  = '',
    $valueFive  = '',
    $valueSix   = '')// 参数过多换行
  {
    if ($valueOne === $valueTwo) {// 控制结构=>后加空格,同{一行,(右边和)左边不加空格
      // code...
    }
    switch ($valueThree) {
      case 'value':
        // code...
        break;
      default:
        // code...
        break;
    }
    do {
      // code...
    } while ($valueFour <= 10);
    while ($valueFive <= 10) {
      // code...
    }
    for ($i=0; $i < $valueSix; $i++) {
      // code...
    }
  }
}
编码规范

PHP代码文件必须以 <?php 标签开始。
<?php //开头

// 不结尾
PHP代码文件必须以不带BOM的UTF-8编码。
例sublime, setting增加,"show_encoding" : true
每行的字符数不超过 80 个字符
例,sublime
"word_wrap": "true",
"wrap_width": 80,
tap键4个空格
例,sublime
"tab_size": 4,
PHP代码中应该只定义类(trait)/函数/常量/其他会产生副作用的操作(如:生成文件输出以及修改 .ini 配置文件等),只能选其一。
例,
a.php
class A
{

}

b.php
function demo()
{

}

c.php
define(&#39;A&#39;, value);

d.php
ini_set(&#39;some_vars&#39;, value);
类/trait/Interface的命名必须遵循 StudlyCaps 大写开头的驼峰命名规范。
class StudlyCaps
{

}

trait StudlyCaps
{

}

Interface StudlyCaps
{

}

类中的常量所有字母都必须大写,单词间用下划线分隔。
define(&#39;FOO_BAR&#39;, &#39;something more&#39;);

const FOO_BAR = value;

方法(类/trait中)名称必须符合 camelCase 式的小写开头驼峰命名规范。
class StudlyCaps
{
    public function studlyCaps()
    {
        // coding...
    }
}

函数名称必须符合 snake_case 式的下划线式命名规范。
function snake_case()
{
    // coding...
}

私有的(private)方法(类/trait中)名称必须符合 _camelCase 式的前置下划线小写开头驼峰命名规范。
class StudlyCaps
{
    private function _studlyCaps()
    {
        // coding...
    }
}

方法名称 第一个单词 为动词。
class StudlyCaps
{
    public function doSomething()
    {
        // coding...
    }
}

变量 必须符合 camelCase 式的小写开头驼峰命名规范。

class StudlyCaps
{
    public function doSomething()
    {
        $someVariable = &#39;demo&#39;;
        // coding...
    }
}

方法/函数 多参数时,之间要有1个空格

class StudlyCaps
{
    public function doSomething($variableOne, $variableTwo)
    {
        // coding...
    }
}

运算符/表达式 要有一个空格
$a = $b + $c;
$a = $b . $c;

每个 namespace 命名空间声明语句块 和 use 声明语句块后面,必须 插入一个空白行。
namespace Standard;
// 空一行
use Test\TestClass;//use引入类
// 空一行
类的开始花括号 "{ "必须 写在函数声明后自成一行,结束花括号"}"也必须写在函数主体后自成一行。
class StudlyCaps
{

}
方法/函数的开始花括号 { 必须 写在函数声明后自成一行,结束花括号 }也 必须 写在函数主体后自成一行。
class StudlyCaps
{
    public function studlyCaps()
    {
        // coding...
    }
}

function snake_case()
{
    // coding...
}

类的属性和方法 必须 添加访问修饰符(private、protected 以及 public),abstract 以及 final 必须 声明在访问修饰符之前,而 static 必须 声明在访问修饰符之后。
abstract class StudlyCaps
{
    abstract public function studlyCaps();

    final public static function studlyCapsOne()
    {

    }
}

控制结构的关键字后 必须 要有一个空格符,而调用方法或函数时则 一定不可 有。
if ($valueOne === $valueTwo) {
  // code...
}

switch ($valueThree) {
  case &#39;value&#39;:
    // code...
    break;

  default:
    // code...
    break;
}

do {
  // code...
} while ($valueFour <= 10);

while ($valueFive <= 10) {
  // code...
}

for ($i = 0; $i < $valueSix; $i++) {
  // code...
}

$demo = new Demo()
$demo->doSomething();

do_something();

控制结构的开始花括号 { 必须 写在声明的同一行,而结束花括号 } 必须 写在主体后自成一行。
if ($valueOne === $valueTwo) {
  // code...
}

switch ($valueThree) {
  case 'value':
    // code...
    break;

  default:
    // code...
    break;
}

do {
  // code...
} while ($valueFour <= 10);

while ($valueFive <= 10) {
  // code...
}

for ($i = 0; $i < $valueSix; $i++) {
  // code...
}
控制结构的开始左括号后和结束右括号前,都一定不可有空格符。
if ($valueOne === $valueTwo) {// 控制结构(右边和)左边不加空格
  // code...
}
编码建议

sql过长
// heredoc语法
$sql = <<<SQL
SELECT delivery_id
FROM d_test
WHERE delivery_id
IN (123,234)
GROUP BY delivery_id
HAVING SUM(send_number) <= 0;
SQL;
if等控制结构条件过长
if ($a > 0
    && $b > 0
    && $c > 0
    && $d > 0
    && $e > 0) {

}
方法或函数参数大于三个换行
public function tooLangFunction(
      $valueOne   = '',
      $valueTwo   = '',
      $valueThree = '',
      $valueFour  = '',
      $valueFive  = '',
      $valueSix   = '')
{
    //coding...
}
链式操作超过两个
$this->nameTest->functionOne()
               ->functionTwo()
               ->functionThree();
数组php5.4以后,使用[]
$a = [
    'aaa' => 'aaa',
    'bbb' => 'bbb'
];
/*单引号多引号
字符串中无变量,单引号
字符串中有变量,双引号
$str = 'str';
$arg = "$str";
声明类或者方法或函数添加描述&属性描述&作者*/
/**
 * 类描述
 *
 * desc
 */
class StandardExample
{
  /**
   *  常量描述.
   *
   * @var string
   */
  const THIS_IS_A_CONST = '';

  /**
   * 属性描述.
   *
   * @var string
   */
  public $nameTest = '';

  /**
   * 构造函数.
   *
   * 构造函数描述
   * @author name <email>
   * @param  string $value 形参名称/描述
   * @return 返回值类型        返回值描述
   * 返回值类型:string,array,object,mixed(多种,不确定的),void(无返回值)
   */
  public function __construct($value = '')
  {
    // coding...
  }
//api方法提供测试样例example
/**
 * 成员方法名称.
 *
 * 成员方法描述
 *
 * @param  string $value 形参名称/描述
 *
 * @example domain/api/controller/action?argu1=111&argu2=222
 */
public function testFunction($value = '')
{
    // code...
}
使用try...catch...
try {

    // coding...

} catch (\Exception $e) {
  // coding...
}

// 连续调用多个方法(大于3个)使用foreach
// 改写doSome为doSomething
class StandardExample
{
  /**
   * 方法列表
   *
   * @var array
   */
  private $_functionList = [];

  public function __construct($functionList = array())
  {
    $this->_functionList = $value;
  }

  public function doSome()
  {
    $this->functionOne();
    $this->functionTwo();
    $this->functionThree();
    $this->functionFour();
  }

  public function doSomething()
  {
      foreach($this->_functionList as $function) {
          $this->$function();
      }
  }

  ...
}
文件顶部进行版权声明
// +----------------------------------------------------------------------
// | Company Name  xx服务
// +----------------------------------------------------------------------
// | Copyright (c) 2017 http://domain All rights reserved.
// +----------------------------------------------------------------------
// | Author: name <email>
// +----------------------------------------------------------------------

Recommandations associées :

Spécification PHP PSR-1 langage php manuel php développeur php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn