symfony2学习笔记(2)——编码标准

Symfony2 遵循 PSR-0,PSR-1和PSR-2 规范。


结构

  • 每个逗号分隔符后面添加一个空格;

  • 比较运算符(==, &&, ...)前后要添加一个空格;

  • 数组的每一项后添加一个逗号,即使在最后一个;

  • 添加return语句之前添加一个空行,除非返回是在一个单独的语句组中(如if语句) ;

  • 使用大括号来表示控制结构体,即使大括号可以省略;

  • 每个文件定义一个类,这并不适用于那些不打算从外部实例化的类,因而不必去关心PSR- 0标准;

  • 方法之前,声明类的属性;

  • 首先声明的公共方法,然后声明保护方法,最后声明私有方法。为了增加代码的可读性,构造函数 和 PHPUnit的setUp 、tearDown方法应该首先被声明;

  • 不管构造函数的参数有多少,实例化类时都需要使用圆括号;

  • 异常消息字符串应该使用sprintf被连接起来。



命名约定

  • 变量,函数和方法名,属性都采用小驼峰命名规则,没有下划线;

  • 选项名称和参数名称使用下划线;

  • 所有类都使用命名空间;

  • 抽象类使用 Abstract 前缀。请注意一些早期Symfony2的类不遵循这一惯例,且并没有被重命名为向后兼容。但是,所有新的抽象类都必须遵循这个命名约定;

  • 接口使用 Interface 前缀;

  • traits使用 Trait 前缀;

  • 异常使用 Exception 前缀;

  • 文件名使用字母、数字和下划线;

  • 在PHPDocs和casting中,使用bool(而不是boolean或Boolean),int(而不是integer),float(而不是double或real);

  • 不要忘了看更详细的约定文档(更主观的命名注意事项)。


由于图片或代码可以胜过千言万语,这里是符合Symfony2编码标准的一个简单的例子:

<?php
     
/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
     
namespace Acme;
     
/**
 * Coding standards demonstration.
 */
class FooBar
{
    const SOME_CONST = 42;
     
    private $fooBar;
     
    /**
     * @param string $dummy Some argument description
     */
    public function __construct($dummy)
    {
        $this->fooBar = $this->transformText($dummy);
    }
      
    /**
     * @param string $dummy Some argument description
     * @param array  $options
     *
     * @return string|null Transformed input
     *
     * @throws RuntimeException
     */
    private function transformText($dummy, array $options = array())
    {
        $mergedOptions = array_merge(
            array(
                'some_default' => 'values',
                'another_default' => 'more values',
            ),
            $options
        );
     
        if (true === $dummy) {
            return;
        }
     
        if ('string' === $dummy) {
            if ('values' === $mergedOptions['some_default']) {
                return substr($dummy, 0, 5);
            }
     
            return ucwords($dummy);
        }
     
        throw new RuntimeException(sprintf('Unrecognized dummy option "%s"', $dummy));
    }
}


by 雪洁 2015-03-09 05:50:16 2081 views
我来说几句

相关文章