下面的代码样式用于Qimall 1.x 核心和官方扩展开发.如果您想将请求代码拉入内核,请考虑使用它. 我们并不强迫您在应用程序中使用这种代码样式.你可以自由选择更适合你的.
总体上我们使用 PSR-2 兼容的风格,所以一切适用 PSR-2 也适用于我们的代码样式.
<?php 或 <?= 标签.StudlyCaps.camelCase.camelCase.elseif 而不是 else if.<?php ?> 或 <?= 标签; 它不能使用其他标记变体,例如 <?.?>..php 结束.PHP 代码只能使用 UTF-8 没有 BOM 头.
类名 必须 在 StudlyCaps. 例如, Controller, Model.
The term "class" refers to all classes and interfaces here.
CamelCase./**
* 实例
*/
class MyClass extends \yii\base\BaseObject implements MyInterface
{
// 代码
}
类常量必须在所有带有下划线分隔符的大写字母中声明. 例如:
<?php
class Foo
{
const VERSION = '1.0';
const DATE_APPROVED = '2012-06-01';
}
camelCase 这样子的第一个字母小写.private, protected 和 public modifiers. var 是不允许的./**
* Documentation
*/
class Foo
{
/**
* Documentation
*/
public function bar()
{
// code
return $value;
}
}
__construct 应该使用PHP 4样式的构造函数.public function save(Transaction $transaction, $argument2 = 100)
{
$transaction = new Connection; // bad
$argument2 = 200; // good
}
$str = 'Like this.';
$str1 = "Hello $username!";
$str2 = "Hello {$username}!";
以下内容是不允许的:
$str3 = "Hello ${username}!";
连接字符串时,在点周围添加空格:
$name = 'Yii' . ' Framework';
当字符串很长时,格式如下:
$sql = "SELECT *"
. "FROM `post` "
. "WHERE `id` = 121 ";
对于数组,我们使用PHP 5.4短数组语法.
在声明数组时使用以下格式:
$arr = [3, 14, 15, 'Yii', 'Framework'];
如果一行有太多的元素:
$arr = [
3, 14, 15,
92, 6, $test,
'Yii', 'Framework',
];
对关联数组使用以下格式:
$config = [
'name' => 'Yii',
'options' => ['usePHP' => true],
];
if ($event === null) {
return new Event();
}
if ($event instanceof CoolEvent) {
return $event->instance();
}
return null;
// 以下内容是不允许的:
if (!$model && null === $event)
throw new Exception('test');
Prefer avoiding else after return where it makes sense. Use guard conditions.
$result = $this->getResult();
if (empty($result)) {
return true;
} else {
// process result
}
更好的
$result = $this->getResult();
if (empty($result)) {
return true;
}
// process result
为switch使用以下格式:
switch ($this->phpType) {
case 'string':
$a = (string) $value;
break;
case 'integer':
case 'int':
$a = (int) $value;
break;
case 'boolean':
$a = (bool) $value;
break;
default:
$a = null;
}
doIt(2, 3);
doIt(['a' => 'b']);
doIt('a', [
'a' => 'b',
'c' => 'd',
]);
Note space between function/use tokens and open parenthesis:
// good
$n = 100;
$sum = array_reduce($numbers, function ($r, $x) use ($n) {
$this->doMagic();
$r += $x * $n;
return $r;
});
// bad
$n = 100;
$mul = array_reduce($numbers, function($r, $x) use($n) {
$this->doMagic();
$r *= $x * $n;
return $r;
});
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
/**
* Component is the base class that provides the *property*, *event* and *behavior* features.
*
* @include @yii/docs/base-Component.md
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class Component extends \yii\base\BaseObject
/**
* 返回事件的附加事件处理程序列表.
* You may manipulate the returned [[Vector]] object by adding or removing handlers.
* 例如,
*
* ```
* $component->getEventHandlers($eventName)->insertAt(0, $eventHandler);
* ```
*
* @param string $name 事件名称
* @return 事件的附加事件处理程序的向量列表
* @throws 如果没有定义事件的报错为Exception
*/
public function getEventHandlers($name)
{
if (!isset($this->_e[$name])) {
$this->_e[$name] = new Vector;
}
$this->ensureBehaviors();
return $this->_e[$name];
}
// 开始,并不是 #.=== [] vs empty()尽可能使用 empty().
当嵌套条件开始变得混乱时,尽早返回. 如果方法很短,也没有关系.
self vs. static除下列情况外,请始终使用static
self: self::MY_CONSTANTself: self::$_eventsself,比如对当前实现的递归调用,而不是扩展类实现.