Maison  >  Article  >  développement back-end  >  Partage des spécifications de style de code PHP

Partage des spécifications de style de code PHP

小云云
小云云original
2018-03-05 10:30:424236parcourir

Cet article partage principalement avec vous la spécification du style de code PHP, j'espère qu'il pourra vous aider.

1. Accords de base

1. Fichiers sources

(1) Les fichiers sources de code PHP pur utilisent uniquement la balise

(2). Le format d'encodage du code PHP dans le fichier source doit être au format UTF-8 sans nomenclature

(3) Utilisez Unix LF (saut de ligne) comme ; le terminateur de ligne ;

(4). Un fichier source ne fait qu'un seul type de déclaration, c'est-à-dire que ce fichier est spécifiquement utilisé pour déclarer la classe et que ce fichier est spécifiquement utilisé pour définir les informations de configuration. les ensemble ;

2. Indentation

Utilisez la touche Tab pour mettre en retrait, et la longueur de chaque touche Tab est définie sur 4 espaces ;

Il est recommandé d'écrire un maximum de 120 caractères. S'il dépasse ce nombre, il doit être enveloppé. Il peut être défini par un éditeur général.

//wo

Ajouter une note pour empêcher le défilement horizontal et vertical,

Mots clés et Vrai/Faux/Null

La clé de PHP. Les mots doivent être en minuscules et les valeurs booléennes : true, false et null doivent également être en minuscules.

Les "mots-clés" PHP suivants doivent être en minuscules :

'__halt_compiler', 'abstract', 'and', 'array', 'as', 'break ' , 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', ' else', 'elseif', 'vide', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final ' , 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'include_once', 'instanceof', 'insteadof', 'interface', ' isset', 'liste', 'espace de noms', 'nouveau', 'ou', 'imprimer', 'privé', 'protégé', 'public', 'require', 'require_once', 'return', 'static ' , 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor'

5. 🎜 >

(1), le nom de la classe est écrit en StudlyCaps ;

(2), le nom de la méthode (de la classe) est écrit en cameCase ; lettres minuscules + traits de soulignement pour les noms de fonctions, tels que function http_send_post(); >

Tels que les commentaires de fonction, les commentaires de variables, etc. Les balises courantes incluent @package, @var, @param, @return, @author, @todo, @throws

Doit être conforme aux règles des balises phpDocument, ne créez pas non plus de nouvelles balises. Pour plus de balises, consultez le site officiel de phpDocument

7. Module métier

(1) Lorsqu'il s'agit d'opérations de mise à jour/ajout de plusieurs tables de données, la couche la plus externe les transactions doivent être utilisées pour garantir l'atomicité des opérations de base de données ;

(2), couche modèle, n'effectue que des requêtes simples sur les tables de données

(3), la logique métier est uniformément encapsulée dans la couche logique ; ;

(4). Le contrôleur effectue uniquement le routage d'URL, ne l'appelez pas comme méthode métier ;

(5). (), order() et d'autres méthodes de modèle,

c'est-à-dire, dans le contrôleur, n'ont pas d'instructions SQL comme celle-ci : D('XXX')->where()->order() ->limit( )->find();

where(), order(), limit() et d'autres méthodes SQL ne peuvent apparaître que dans la couche Modèle et la couche métier !

2. Style de code

1. Déclarations d'espace de noms (Namespace) et d'importation (Utilisation)

Décrivez-le d'abord brièvement dans le texte :

Il doit y avoir une ligne vide après la déclaration de l'espace de noms ;

Toutes les déclarations d'importation (utilisation) doivent être placées sous la déclaration de l'espace de noms ;

Il ne doit y avoir qu'un seul mot-clé d'importation (utilisation) dans une instruction
  1. Il doit y avoir une ligne vide après le bloc de code de déclaration d'importation (utilisation) OK ; >
  2. Utilisez le code pour illustrer :

    1

    2

    3

    4

    5

    6

    namespace LibDatabases; // 下面必须空格一行

    class Mysql {

    }

    espace de noms下空一行,才能使用use,再空一行,才能声明class

    < /tableau>

    2、类(class),属性(property)和方法(method)

    (1)、继承(extends) 和实现(implement) 必须和 nom de classe 写在一行。

    < style de table="margin:5px 0px;border-collapse:collapse;border-spacing:0px;border:1px solid #C0C0C0;width:951px;padding:0px;background:none;float:none;height:auto;line- hauteur : 1,1em ; alignement vertical : ligne de base ; famille de polices : Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace ; taille de police : 12 px ; hauteur min : auto ;" border="0">

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    namespace LibDatabases; // 下面必须空格一行

    use FooInterface; // use 必须在namespace 后面声明

    use BarClass as Bar;

    use OtherVendorOtherPackageBazClass; // 下面必须空格一行

    class Mysql {

    }

    1<🎜><🎜>2<🎜><🎜>3<🎜><🎜>4<🎜><🎜>5<🎜><🎜>6<🎜><🎜> 7<🎜><🎜>8<🎜><🎜>9<🎜><🎜>10<🎜>
    <🎜><🎜>namespace LibDatabases; // 下面必须空格一行<🎜><🎜> <🎜><🎜>utilisez FooInterface ; // utilise 必须在namespace 后面声明<🎜><🎜>utilise BarClass comme Bar ;<🎜><🎜>utilise OtherVendorOtherPackageBazClass ; // 下面必须空格一行<🎜><🎜> <🎜><🎜>class Mysql {<🎜><🎜> <🎜><🎜>}<🎜>

    1

    2

    3

    4

    5

    6

    namespace LibDatabaes;

    class Mysql extends ParentClass implements PDO, DB { // 写一行

    }

    1

    2

    1

    2

    3

    4

    5

    6

    7

    8

    namespace LibDatabaes;

    class Mysql extends ParentClass implements PDO, DB { // 写一行

    public $foo = null;

    private $name = 'yangyi';

    protected $age = '17';

    }

    <🎜>3<🎜><🎜>4<🎜><🎜>5<🎜><🎜>6<🎜>
    <🎜><🎜>espace de noms LibDatabaes;<🎜><🎜> <🎜><🎜>la classe Mysql étend ParentClass implémente PDO, DB { // 写一行<🎜><🎜> <🎜><🎜>}<🎜>
    <🎜>(2)、属性(propriété)必须声明其可见性,到底是 public 还是 privé,不能省略,也不能使用var , var php老版本中的什么方式,等用于public。<🎜>
    <🎜>1<🎜><🎜>2<🎜><🎜>3<🎜><🎜>4<🎜><🎜>5<🎜><🎜>6<🎜><🎜> 7<🎜><🎜>8<🎜><🎜><🎜>espace de noms LibDatabaes;<🎜><🎜> <🎜><🎜>la classe Mysql étend ParentClass implémente PDO, DB { // 写一行<🎜 ><🎜>    public $foo = null;<🎜><🎜>    private $name = 'yangyi';<🎜><🎜>    protected $age = '17';<🎜><🎜>}<🎜>

    (3) La méthode doit déclarer sa visibilité, qu'elle soit publique, protégée ou privée, elle ne peut être omise. S'il y a plusieurs paramètres, suivez le premier paramètre avec "," et ajoutez un espace : nom_fonction ($par, $par2, $pa3). Si les paramètres ont des valeurs par défaut, séparez-les par un espace à gauche et à droite de ". =".

    1

    2

    3

    4

    5

    6

    7

    8

    namespace LibDatabaes;

    class Mysql extends ParentClass implements PDO, DB { // 写一行

    public getInfo($name, $age, $gender = 1) { // 参数之间有一个空格。默认参数的“=”左右各有一个空格,) 与 { 之间有一个空格

    }

    }

    1

    2

    3

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    namespace VendorPackage;

    abstract class ClassName {

    protected static $foo; // static放后面

    abstract protected function zim(); // abstract放前面

    final public static function bar() { // final放前面,static放最后。

    // 方法主体部分

    }

    }

    <🎜>4<🎜><🎜>5 <🎜><🎜>6<🎜><🎜>7<🎜><🎜>8<🎜>
    <🎜><🎜>namespace LibDatabaes;<🎜><🎜> <🎜><🎜>class Mysql extends ParentClass implémente PDO, DB { // Écrivez une ligne <🎜><🎜> public getInfo($name, $age, $gender = 1) { // Il y a un espace entre les paramètres. Il y a un espace autour du "=" du paramètre par défaut, et il y a un espace entre ) et { <🎜><🎜> <🎜><🎜> }<🎜><🎜>}<🎜>
    <🎜>(4). Lorsque abstract et final sont utilisés pour faire des déclarations de classe, ils doivent être placés devant la déclaration de visibilité (publique ou protégée ou privée) . Lorsque static est utilisé pour la déclaration de classe, il doit être placé après la déclaration de visibilité. <🎜><🎜>Ajoutez le code directement : <🎜>
    <🎜>1<🎜><🎜>2<🎜><🎜>3<🎜> < 🎜>4<🎜><🎜>5<🎜><🎜>6<🎜><🎜>7<🎜><🎜>8<🎜><🎜>9<🎜><🎜>10<🎜>< 🎜 >11<🎜><🎜><🎜>namespace VendorPackage;<🎜><🎜> <🎜><🎜>classe abstraite ClassName {<🎜><🎜> protected static $foo; // mettre la statique derrière < 🎜><🎜> abstract protected function zim(); // le résumé est mis en premier <🎜><🎜> <🎜><🎜> final public static function bar() { // final est mis en premier, static est en dernier. <🎜><🎜> // Partie du corps de la méthode <🎜><🎜> }<🎜><🎜>}<🎜>

    3. Structure de contrôle

    Interface de contrôle, qui est if else pendant le changement, etc. Ce type de norme d’écriture est souvent sujet à des problèmes, il convient donc de la normaliser.

    (1) Si, elseif, else méthode d'écriture, allez simplement au code standard :

    1

    2

    3

    4

    5

    6

    7

    8

    if ($expr1) { // if 与 ( 之间有一个空格,) 与 { 之间有一个空格

    } elseif ($expr2) { // elesif 连着写,与 ( 之间有一个空格,) 与 { 之间有一个空格

    } else { // else 左右各一个空格

    }

    1

    2

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    switch ($expr) { // switch 与 ( 之间有一个空格,) 与 { 之间有一个空格

    case 0:

    echo 'First case, with a break'; // 对齐

    break; // 换行写break,也对齐。

    case 1:

    echo 'Second case, which falls through';

    // no break

    case 2:

    case 3:

    case 4:

    echo 'Third case, return instead of break';

    return;

    default:

    echo 'Default case';

    break;

    }

    <🎜>3<🎜><🎜>4<🎜><🎜>5<🎜><🎜>6<🎜><🎜>7<🎜><🎜>8<🎜>
    <🎜><🎜>if ($expr1) { // Il y a un espace entre if et (, il y a un espace entre ) et { <🎜><🎜> <🎜><🎜>} elseif ($expr2) { // elesif s'écrit en continu, il y a un espace entre (,) et { Il y a un espace entre <🎜><🎜> <🎜><🎜>} else { // else Il y a un espace à gauche et à droite <🎜><🎜 > <🎜><🎜>}<🎜>
    <🎜> (2), switch, case Faites attention aux espaces et aux sauts de ligne, ou accédez directement au code standard : <🎜 >< td class="code" style="padding :3px;border:1px solid rgb(204,204,204);border-collapse:collapse;margin:0px;background:none;float:none;height:auto;line-height:1.1em ;vertical-align:baseline;width:auto ;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;"><🎜><🎜>switch ($expr) { // Il y a un espace entre switch et (, il y a un espace entre ) et {<🎜><🎜> case 0:<🎜><🎜> echo 'Premier cas, avec une pause'; // Alignement<🎜> <🎜>                                                                                                                                                                                                           qui est qui qui est qui qui est qui who who who envoie des SMS, break; // Écrivez break dans une nouvelle ligne et alignez-le également. <🎜><🎜> cas 1 :<🎜><🎜> echo 'Deuxième cas, qui échoue';<🎜><🎜> // pas de pause<🎜><🎜> cas 2 :<🎜><🎜> cas 3 :<🎜><🎜> cas 4 :<🎜><🎜> echo 'Troisième cas, retour au lieu de pause';<🎜><🎜> retour;<🎜><🎜> défaut :<🎜><🎜 > echo 'Cas par défaut';<🎜><🎜> break;<🎜><🎜>}<🎜>
    <🎜>1<🎜><🎜>2<🎜><🎜>3<🎜><🎜> 4<🎜><🎜>5<🎜 ><🎜>6<🎜><🎜>7<🎜><🎜>8<🎜><🎜>9<🎜><🎜>10<🎜><🎜>11 <🎜><🎜>12<🎜> <🎜>13<🎜><🎜>14<🎜><🎜>15<🎜><🎜>16<🎜><🎜>17<🎜>

    (3)、while,do while 的写法也是类似,上代码:

    1

    2

    3

    4

    5

    6

    7

    8

    while ($expr) { // while 与 ( 之间有一个空格, ) 与 { 之间有一个空格

    }

    do { // do 与 { 之间有一个空格

    } while ($expr); // while 左右各有一个空格

    1

    2

    1

    2

    3

    4

    for ($i = 0; $i < 10; $i++) { // for 与 ( 之间有一个空格,二元操作符 "="、"<" 左右各有一个空格,) 与 { 之间有一个空格

    }

    <🎜>3<🎜><🎜>4<🎜><🎜>5<🎜><🎜>6<🎜><🎜> 7<🎜><🎜>8<🎜>
    <🎜><🎜>while ($expr) { // while 与 ( 之间有一个空格, ) 与 { 之间有一个空格<🎜><🎜 > <🎜><🎜>}<🎜><🎜> <🎜><🎜>faire { // faire 与 { 之间有一个空格<🎜><🎜> <🎜><🎜>} pendant que ($expr) ; // while 左右各有一个空格<🎜>
    <🎜>(4)、for的写法<🎜>
    <🎜>1<🎜><🎜>2<🎜><🎜>3<🎜><🎜>4<🎜><🎜><🎜>pour ($i = 0; $ i < 10;  $i++) { // pour 与 ( 之间有一个空格,二元操作符 "="、"<" 左右各有一个空格,) 与 { 之间有一个空格<🎜>< 🎜> <🎜><🎜>}<🎜>

    (5)、foreach的写法

    1

    2

    3

    4

    foreach ($iterable as $key => $value) { // foreach 与 ( 之间有一个空格,"=>" 左右各有一个空格,) 与 { 之间有一个空格

     

    }

    1

    2

    1

    2

    3

    4

    5

    6

    7

    8

    try { // try 右边有一个空格

    } catch (FirstExceptionType $e) { // catch 与 ( 之间有一个空格,) 与 { 之间有一个空格

    } catch (OtherExceptionType $e) { // catch 与 ( 之间有一个空格,) 与 { 之间有一个空格

    }

    <🎜>3<🎜><🎜>4<🎜>
    <🎜><🎜>foreach ($iterable as $key = > $value) { // foreach 与 ( 之间有一个空格,"=>" 左右各有一个空格,) 与 { 之间有一个空格 }

    (6)、try catch的写法
    123456 78 <🎜>try { // try 右边有一个空格<🎜><🎜> <🎜><🎜>} catch (FirstExceptionType $e) { / / catch 与 ( 之间有一个空格,) 与 { 之间有一个空格<🎜><🎜> <🎜><🎜>} catch (OtherExceptionType $e) { // catch 与 ( ,)与 { 之间有一个空格<🎜><🎜> <🎜><🎜>}<🎜>

    4. Commentaire

    (1), le commentaire de ligne

    // doit être suivi d'un espace

    S'il y a un caractère non vide devant ; de //, puis // Un espace doit être ajouté devant ;

    (2), commentaires de fonction

    Le texte des noms de paramètres, des noms d'attributs et des étiquettes doit être aligné et down;

    doit être ajouté avant la première étiquette. Une ligne vide;

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    /**

    * This is a sample function to illustrate additional PHP

    * formatter options.

    *

    * @param $one The first parameter

    * @param int $two The second parameter

    * @param string $three The third parameter with a longer

    * comment to illustrate wrapping.

    * @return void

    * @author phpgo.cnblogs.com

    * @license GPL

    */

    function foo($one, $two = 0, $three = "String") {

    }

    1<🎜><🎜>2<🎜 ><🎜>3<🎜><🎜>4<🎜> <🎜>5<🎜><🎜>6<🎜><🎜>7<🎜><🎜>8<🎜><🎜>9<🎜> <🎜>10<🎜><🎜>11<🎜>< 🎜>12<🎜><🎜>13<🎜><🎜>14<🎜><🎜>15<🎜><🎜>16<🎜>< /td>
    <🎜>< ?php<🎜><🎜>/**<🎜><🎜> * Ceci est un exemple de fonction pour illustrer des options de formatage PHP<🎜><🎜> * supplémentaires.<🎜><🎜> *<🎜><🎜> * @param        $one   Le premier paramètre<🎜> <🎜> * @param int    $two   Le deuxième paramètre<🎜><🎜> * @param string $trois Le troisième paramètre avec un commentaire plus long<🎜><🎜> *                      commentaire pour illustrer l'emballage.<🎜><🎜> * @ return void<🎜><🎜> * @author  phpgo.cnblogs.com<🎜><🎜> * @license GPL<🎜><🎜> * /<🎜><🎜>function foo($one, $two = 0, $trois = "String") {<🎜><🎜> <🎜> <🎜>}<🎜>

    5. Espace

    (1), opérateurs d'affectation (=, +=, etc.), opérateurs logiques (&&, ||), opérateurs de signe égal (==, !=), opérateurs de relations. (<, >, <=, >=), opérateurs au niveau du bit (&, |, ^), connecteurs (.) Il y a un espace à gauche et à droite

    (2) , if, else, elseif, while, do, switch, for, foreach, try, catch, enfin, etc. Il y a un espace entre le crochet gauche immédiat "(";

    (3), function, Between les différents paramètres de la méthode, il y a un espace après la virgule (",");

    6. Ligne vide

    (1) Toutes les accolades gauches { ne sont pas renvoyées à la ligne. , et { est serré Il doit y avoir une ligne vide devant le commentaire (commentaire de ligne/commentaire de bloc) du code au même niveau (même indentation

    (3), il y a une ligne vide); entre chaque méthode/fonction ;

    (4), il y a une ligne vide entre l'instruction d'espace de noms, l'instruction use et l'instruction de classe

    (5) , return instruction

    If il n'y a qu'une seule ligne de code PHP avant l'instruction return, il n'est pas nécessaire d'avoir une ligne vide avant l'instruction return

    S'il y a au moins deux lignes de code PHP avant l'instruction return, ajoutez un espace ; ligne avant l'instruction return

    (5), il y a une ligne vide entre if, while, switch, for, foreach, try et d'autres blocs de code et entre d'autres codes ; >

    【Résumé de l'exemple de référence】


    Référence 1 :

    1

    2

    3

    1

    2

    3

    4

    5

    6

    7

    8

    namespace LibDatabaes;

    class Mysql extends ParentClass implements PDO, DB { // 写一行

    public getInfo($name, $age, $gender = 1) { // 参数之间有一个空格。默认参数的“=”左右各有一个空格,) 与 { 之间有一个空格

    }

    }

    <🎜>4<🎜><🎜>5<🎜><🎜>6<🎜><🎜>7<🎜><🎜>8<🎜 >
    <🎜> <🎜>namespace LibDatabaes;<🎜><🎜> <🎜><🎜>class Mysql étend ParentClass implémente PDO, DB { // Écrivez une ligne <🎜><🎜> public getInfo($name , $age, $ Gender = 1) { // Il y a un espace entre les paramètres. Il y a un espace autour du "=" du paramètre par défaut, et il y a un espace entre ) et { <🎜><🎜> <🎜><🎜> }<🎜><🎜>}<🎜>

    参考2 :

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    namespace VendorPackage;

    abstract class ClassName {

    protected static $foo; // static放后面

    abstract protected function zim(); // abstract放前面

    final public static function bar() { // final放前面,static放最后。

    // 方法主体部分

    }

    }

    1<🎜><🎜>2<🎜><🎜>3<🎜><🎜>4<🎜><🎜>5<🎜><🎜>6<🎜><🎜> 7<🎜><🎜>8<🎜><🎜>9<🎜><🎜>10<🎜><🎜>11<🎜>
    <🎜><🎜>namespace VendorPackage;<🎜><🎜> <🎜><🎜>classe abstraite ClassName {<🎜><🎜>    protected static $foo ; // static放后面<🎜><🎜>    fonction abstraite protégée zim(); // résumé放前面<🎜><🎜> <🎜><🎜>    final public static function bar() { // final放前面,static放最后。<🎜><🎜>        // 方法主体部分<🎜>< 🎜>    }<🎜><🎜>}<🎜>

    参考3:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    namespace libraryModel;

    use libraryHelperImageHelper;

    use libraryLogicUserMainLogic;

    /**

    * 用户表 数据模型

    *

    * @package libraryModel

    */

    class UserMainModel extends BasicModel {

    /**

    * 获得用户统计信息

    *

    * @param int $userId 用户ID

    * @return array

    */

    public function getUserCard($userId) {

    $userId = intval($userId);

    return UserMainLogic::instance()->getUserCard($userId);

        }

     

        /**

         * 根据Id 获取用户信息

         *

         * @param int    $userId 用户Id

         * @param string $field  显示字段

         * @return array

         */

        public function getByUserId($userId = 0, $field = '*') {

            if (empty($userId)) {

                return array();

            }

     

            $where = array('id' => $userId);

            $info = $this->field($field)->where($where)->find();

     

            if (isset($info['image']) && isset($info['sex'])) {

                $info['image'] = ImageHelper::GetImageUrl($info['image'], $info['sex']);

            }

     

            return $info;

        }

    }

    123456 7891011121314 151617181920212223242526272829303132333435 36373839404142434445
    <🎜>namespace libraryModel;<🎜><🎜> <🎜><🎜>utiliser libraryHelperImageHelper;<🎜> <🎜>use libraryLogicUserMainLogic;<🎜><🎜> <🎜><🎜>/**<🎜><🎜> * Modèle de données de la table utilisateur <🎜><🎜> *<🎜><🎜> * @package libraryModel<🎜><🎜>*/<🎜><🎜>class UserMainModel étend BasicModel {<🎜><🎜>     /**<🎜><🎜> * Obtenir des informations statistiques sur l'utilisateur<🎜><🎜> *<🎜><🎜> * @param int $userId ID utilisateur<🎜><🎜> * @return array<🎜><🎜>* /<🎜><🎜>    fonction publique getUserCard($userId) {<🎜><🎜>        $userId = intval($userId);<🎜><🎜>        return UserMainLogic::instance()->getUserCard($userId );    }     /** * Obtenir des informations utilisateur en fonction de l'identifiant * * @param int $userId UserId * @param string $field Champ d'affichage * @return array*/    fonction publique getByUserId($userId = 0, $field = '*' ) {        if (empty($userId)) {            return array();        }         $where = array('id' => $userId);        $info = $this->field($field)->where($where)->find();  if (isset($info['image']) && isset($info['sex'])) {            $info['image'] = ImageHelper::GetImageUrl($info['image' ], $info['sex']);        }         return $info;    }}

    参考4:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    $serv = new swoole_server("127.0.0.1", 9502);

     

    // sets server configuration, we set task_worker_num config greater than 0 to enable task workers support

    $serv->set(array('task_worker_num' => 4));

     

    // attach handler for receive event, which have explained above.

    $serv->on('receive', function($serv, $fd, $from_id, $data) {

        // we dispath a task to task workers by invoke the task() method of $serv

        // this method returns a task id as the identity of ths task

        $task_id = $serv->task($data);

        echo "Dispath AsyncTask: id=$task_idn";

    });

     

    // attach handler for task event, the handler will be executed in task workers.

    $serv->on('task', function ($serv, $task_id, $from_id, $data) {

        // handle the task, do what you want with $data

        echo "New AsyncTask[id=$task_id]".PHP_EOL;

     

        // after the task task is handled, we return the results to caller worker.

        $serv->finish("$data -> OK");

    });

     

    // attach handler for finish event, the handler will be executed in server workers, the same worker dispatched this task before.

    $serv->on('finish', function ($serv, $task_id, $data) {

        echo "AsyncTask[$task_id] Finish: $data".PHP_EOL;

    });

     

    $serv->start();

    123456 7891011121314 1516171819202122232425262728
    $serv = new swoole_server("127.0.0.1", 9502); // définit la configuration du serveur, nous définissons la configuration task_worker_num supérieure à 0 pour activer la prise en charge des tâches$serv->set(array('task_worker_num' => 4)); // attacher un gestionnaire pour l'événement de réception, expliqué ci-dessus.$serv->on('receive', function($serv , $fd, $from_id, $data) {    // nous transmettons une tâche aux tâches des travailleurs en invoquant la méthode task() de $serv    // cette méthode renvoie un identifiant de tâche comme identité de cette tâche    $task_id = $serv->task($data);    echo "Dispath AsyncTask: id=$task_idn";} ); // attacher un gestionnaire pour l'événement de tâche, le gestionnaire sera exécuté dans les tâches de travail.$serv->on('task', function ( $serv, $task_id, $from_id, $data) {    // gérer la tâche, faites ce que vous voulez avec $data    echo "New AsyncTask[id=$task_id]". PHP_EOL;     // une fois la tâche traitée, nous renvoyons les résultats au travailleur appelant.    $serv->finish("$data -> OK");}); // attacher un gestionnaire pour l'événement de fin, le gestionnaire sera exécuté dans les serveurs du serveur, le même travailleur a envoyé cette tâche auparavant. $serv->on('finish', function ($serv, $task_id, $data) {    echo "AsyncTask[$task_id] Fin : $data".PHP_EOL; }); $serv->start();

    Résumé : Toutes les accolades gauches { ne coupent pas de nouvelles lignes, et celle immédiatement en dessous { ne doit pas être une ligne vide !

    Les spécifications de style de code ci-dessus font référence aux spécifications de Java, JavaScript, Objective-C, Go et d'autres langages de développement !

    Le langage Java a un impact profond sur les programmeurs chinois, et la plupart des gens sont encore habitués à laisser l'accolade gauche { sans nouvelle ligne !

    Principe d'écriture : Rendre le code compact sans perdre une petite modularité !

    Spécification PSR-4

    La spécification PSR-4 est une nouvelle spécification qui vient d'apparaître Elle régule également le chargement automatique (autoload). PSR-0 sont des spécifications supplémentaires.

    Permettez-moi d'expliquer brièvement, principalement les points suivants :

    1. La suppression de PSR-0 est un fractionnement de répertoire dans la manière d'écrire des symboles. , _underscore n'a aucune signification particulière dans les noms de classe complets.

    2. Le nom du fichier de classe doit se terminer par .php.

    3. Le nom de la classe doit être exactement le même que le nom du fichier correspondant, et la casse doit être exactement la même.

    Référence :

    Recherche de style de code : l'accolade gauche est-elle une nouvelle ligne ? ? ?

    Spécification du code PSR-[0-4] en PHP

    [Supplémentaire] Format d'écriture de tableau

    Lorsqu'il n'y a qu'une seule paire clé-valeur, écrivez-la sur une seule ligne :

    1

    $where = array('id' => 789);

    1

    $where = array('id' => 789);

    1

    2

    3

    4

    $where = array(

        'id' => 789,

        'user_name' => 'phpgo'

    );

    Lorsqu'il y a plusieurs (deux ou plus) paires clé-valeur, enveloppez la ligne :
    1234 $where = array( 'id' => 789, 'user_name' => 'phpgo');

    Recommandations associées :

    Partage du style de code de pagination ThinkPHP 3.2.3

    Style de code PHP

    Documentation PHP sur les standards de codage (collection)

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