Variables PHP


Variables

1. Utilisez des noms de variables qui ont du sens

2. La même entité doit utiliser le même nom de variable

3. Utilisez des noms faciles à rechercher (partie 1)

4. Utilisez des noms faciles à rechercher (partie 2)

5. Utilisez des variables explicites

6. Évitez la nidification profonde et revenez le plus tôt possible (partie 1)

7. Évitez la nidification profonde et revenez le plus tôt possible (partie 2)

8. Utilisez des noms de variables moins dénués de sens

9. N'ajoutez pas de contexte inutile

10. Utilisez raisonnablement les valeurs par défaut des paramètres, il n'est pas nécessaire de faire une détection des valeurs par défaut dans la méthode

1. Utilisez des noms de variables qui ont du sens

Mauvais :

$ymdstr = $moment->format('y-m-d');

Bien :

$currentDate = $moment->format('y-m-d');

2. La même entité doit utiliser le même nom de variable

Mauvais :

getUserInfo();
getUserData();
getUserRecord();
getUserProfile();

Bien :

getUser();

3. Utilisez un nom convivial (partie 1)

Le code est écrit pour être lu. Il est donc crucial d’écrire du code hautement lisible et consultable. Si vous nommez des variables qui ne sont pas significatives et faciles à comprendre, vous ne rendez pas service à vos lecteurs. Veuillez rendre votre code consultable.

Mauvais :

// 448 ™ 干啥的?
$result = $serializer->serialize($data, 448);

Bien :

$json = $serializer->serialize($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

4. Utilisez des noms faciles à rechercher (partie 2)

Mauvais :

class User
{
    // 7 ™ 干啥的?
    public $access = 7;
}
 
// 4 ™ 干啥的?
if ($user->access & 4) {
    // ...
}
 
// 这里会发生什么?
$user->access ^= 2;

Bien :

class User
{
    const ACCESS_READ = 1;
    const ACCESS_CREATE = 2;
    const ACCESS_UPDATE = 4;
    const ACCESS_DELETE = 8;
 
    // 默认情况下用户 具有读、写和更新权限
    public $access = self::ACCESS_READ | self::ACCESS_CREATE | self::ACCESS_UPDATE;
}
 
if ($user->access & User::ACCESS_UPDATE) {
    // do edit ...
}
 
// 禁用创建权限
$user->access ^= User::ACCESS_CREATE;

5. Utilisez des variables explicites

Mauvais :

$address = 'One Infinite Loop, Cupertino 95014';
$cityZipCodeRegex = '/^[^,]+,\s*(.+?)\s*(\d{5})$/';
preg_match($cityZipCodeRegex, $address, $matches);
 
saveCityZipCode($matches[1], $matches[2]);

Pas mal :

Mieux, mais fortement dépendant de la familiarité avec les expressions régulières

$address = 'One Infinite Loop, Cupertino 95014';
$cityZipCodeRegex = '/^[^,]+,\s*(.+?)\s*(\d{5})$/';
preg_match($cityZipCodeRegex, $address, $matches);
 
[, $city, $zipCode] = $matches;
saveCityZipCode($city, $zipCode);

Bien :

Utilisez des sous-règles avec des noms, vous n'avez pas besoin de comprendre les règles habituelles pour les comprendre

$address = 'One Infinite Loop, Cupertino 95014';
$cityZipCodeRegex = '/^[^,]+,\s*(?<city>.+?)\s*(?<zipCode>\d{5})$/';
preg_match($cityZipCodeRegex, $address, $matches);
 
saveCityZipCode($matches['city'], $matches['zipCode']);

6. Évitez la nidification profonde et revenez le plus tôt possible (partie 1)

Trop de déclarations if else rendent généralement votre code difficile à lire. Il vaut mieux être direct que vague.

Oups :

    if (empty($day)) {
        return false;
    }
 
    $openingDays = [
        'friday', 'saturday', 'sunday'
    ];
 
    return in_array(strtolower($day), $openingDays, true);
}

7. Évitez la nidification profonde et revenez tôt (partie 2)
Oups :

function fibonacci(int $n)
{
    if ($n < 50) {
        if ($n !== 0) {
            if ($n !== 1) {
                return fibonacci($n - 1) + fibonacci($n - 2);
            } else {
                return 1;
            }
        } else {
            return 0;
        }
    } else {
        return 'Not supported';
    }
}

Bien :

function fibonacci(int $n): int
{
    if ($n === 0 || $n === 1) {
        return $n;
    }
 
    if ($n >= 50) {
        throw new \Exception('Not supported');
    }
 
    return fibonacci($n - 1) + fibonacci($n - 2);
}

8. Utilisez des noms de variables moins dénués de sens

Ne laissez pas les personnes qui lisent votre code deviner la signification des variables que vous écrivez. Il vaut mieux écrire clairement que vaguement.

Mauvais :

$l = ['Austin', 'New York', 'San Francisco'];
 
for ($i = 0; $i < count($l); $i++) {
    $li = $l[$i];
    doStuff();
    doSomeOtherStuff();
    // ...
    // ...
    // ...
  // 等等, `$li` 又代表什么?
    dispatch($li);
}

Bien :

$locations = ['Austin', 'New York', 'San Francisco'];
 
foreach ($locations as $location) {
    doStuff();
    doSomeOtherStuff();
    // ...
    // ...
    // ...
    dispatch($location);
}

9. N'ajoutez pas de contexte inutile

Si certaines informations peuvent déjà être apprises à partir du nom de votre classe ou du nom de votre objet, ne les répétez pas dans le nom de la variable.

Mauvais :

 class Car
{
    public $carMake;
    public $carModel;
    public $carColor;
 
    //...
}

Bien :

 class Car
{
    public $make;
    public $model;
    public $color;
 
    //...
}

10. Utilisez raisonnablement les valeurs par défaut des paramètres, il n'est pas nécessaire de faire une détection des valeurs par défaut dans les méthodes

Pas bien :

Pas bon, $breweryName 可能为 NULL.

 function createMicrobrewery($breweryName = 'Hipster Brew Co.'): void
{
    // ...
}

D'accord :

C'est plus facile à comprendre que le précédent, mais il vaut mieux pouvoir contrôler la valeur de la variable.

 function createMicrobrewery($name = null): void
{
    $breweryName = $name ?: 'Hipster Brew Co.';
    // ...
}

Bien :

Si votre programme ne prend en charge que PHP 7+, vous pouvez utiliser l'indication de type pour garantir les variables $breweryName 不是 NULL.

 function createMicrobrewery(string $breweryName = 'Hipster Brew Co.'): void
{
    // ...
}