首页 > 作文

PHP 代码简洁之道 ( PHP Clean Code)(第二部分)

更新时间:2023-04-08 10:22:14 阅读: 评论:0

php 代码简洁之道 ( php clean code)(第一部分)

使用默认参数而护理学校不是使用短路运算或者是条件判断

不好的做法:

这是不太好的因为$breweryname可以是null.

function createmicrobrewery($breweryname = 'hipster brew co.'): void{    // ...}

  

还算可以的做法:

这个做法比上面的更加容易理解,但是它需要很好的去控制变量的值.

function createmicrobrewery($name = null): void{    $breweryname = $name ?: 'hipster brew co.';    // ...}

  

好的做法:

你可以使用类型提示而且可以保证$breweryname不会为空null.

function createmicrobrewery(string $breweryname = 'hipster brew co.'): void{    // ...}}

  

对比

使用相等运算符

不好的做法:

$a = '42';$b = 42;使用简单的相等运算符会把字符串类型转换成数字类型if( $a != $b ) {   //这个条件表达式总是会通过}

  

表达式 $a != $b 会返回 fal 但实际上它应该是 true !
字符串类型 ’42’ 是不同于数字类型的 42

好的做法:
使用全等运算符会对比类型和值

if( $a !== $b ) {    //这个条件是通过的}

  

表达式 $a !== $b 会返回 true。

函数

函数参数(2 个或更少)

限制函数参数个数极其重要

这样测试你的函数容易点。有超过 3 个可选参数会导致一个爆炸式组合增长,你会有成吨独立参数情形要测试。

无参数是理想情况。1 个或 2 个都可以,最好避免 3 个。

再多就需要加固了。通常如果你的函数有超过两个参数,说明他要处理的事太多了。 如果必须要传入很多数据,建议封装一个高级别对象作为参数。

不友好的:

function createmenu(string $title, string $body, string $buttontext, bool $cancellable): void{    // ...}

  

友好的:

class menuconfig{    public $title;    public $body;    public $buttontext;    public $cancellable = fal;}$config = new menuconfig();$config->title = 'foo';$config->body = 'bar';$config->buttontext = 'baz';$config->cancellable = true;function createmenu(menuconfig $config): void{    // ...}

  

函数应该只做一件事情

这是迄今为止软件工程最重要的原则。函数做了超过一件事情时,它们将变得难以编写、测试、推导。 而函数只做一件事情时,重构起来则非常简单,同时代码阅读起来也非常清晰。掌握了这个原则,你就会领先许多其他的开发者。

不好的:

function emailclients(array $clients): void{    foreach ($clients as $client) {        $clientrecord = $db->find($client);        if ($clientrecord->isactive()) {            email($client);        }    }}

  

好的:

function emailclients(array $clients): void{    $activeclients = activeclients($clients);    array_walk($activeclients, 'email');}function activeclients(array $clients): array{    return array_filter($clients, 'isclientactive');}function isclientactive(int $client): bool{    $clientrecord = $db->find($client);    return $clientrecord->isactive();}

  

函数的名称要说清楚它做什么 不好的例子:
class email{    //...    public function handle(): void    {        mail($this->to, $this->subject, $this->body);    }}$message = new email(...);// what is this? a handle for the message? are we writing to a file now?$message->handle()

  

; 

很好的例子:

class email {    //...    public function nd(): void    {        mail($this->to, $this->subject, $this->body);    }}$message = new email(...);// clear and obvious$message->nd();

  

函数只能是一个抽象级别

当你有多个抽象层次时,你的函数功能通常是做太多了。 分割函数功能使得重用性和测试更加容易。.

不好:

function parbetterjsalternative(string $code): void{    $regexes = [        // ...    ];    $statements = explode(' ', $code);    $tokens = [];    foreach ($regexes as $regex) {        foreach ($statements as $statement) {            // ...        }    }    $ast = [];    foreach ($tokens as $token) {        // lex...    }    foreach ($ast as $node) {       泰国说什么语言 // par...    }}

  

同样不是很好:

我们已经完成了一些功能,但是parbetterjsalternative()功能仍然非常复杂,测试起来也比较麻烦。

function tokenize(string $code): array{    $regexes = [        // ...    ];    $statements = explode(' ', $code);    $tokens = [];    foreach ($regexes as $regex) {        foreach ($statements as $statement) {            $tokens[] = /* ... */;        }    }    return $tokens;}function lexer(array $tokens): array{    $ast = [];    foreach ($tokens as $token) {        $ast[] = /* ... */;    }    return $ast;}function parbetterjsalternative(string $code): void{    $tokens = tokenize($code);    $ast = lexer($tokens);    foreach ($ast as $node) {        // par...    }}

  

很好的:

最好的解决方案是取出parbetterjsalternative()函数的依赖关系.

class tokenizer{    public function tokenize(string $code): array    {        $regexes = [            // ...        ];        $statements = explode(' ', $code);        $tokens = [];        foreach ($regexes as $regex) {            foreach ($statements as $statement) {                $tokens[] = /* ... */;            }        }        return $tokens;    }}class lexer{    public function lexify(array $tokens): array    {        $ast = [];        foreach ($tokens as $token) {            $ast[] = /* ... */;        }        return $ast;    }}class betterjsalternative{    p成都交通限行rivate $tokenizer;    private $l经期能喝茶吗exer;    public function __construct(tokenizer $tokenizer, lexer $lexer)    {        $this->tokenizer = $tokenizer;        $this->lexer = $lexer;    }    public function par(string $code): void    {        $to技能特长怎么写kens = $this->tokenizer->tokenize($code);        $ast = $this->lexer->lexify($tokens);        foreach ($ast as $node) {            // par...        }    }}

  

更多学习内容请访问:

腾讯t3-t4标准精品php架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)

本文发布于:2023-04-08 10:22:12,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/b5b2eca02c9826156987802507baa4a5.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP 代码简洁之道 ( PHP Clean Code)(第二部分).doc

本文 PDF 下载地址:PHP 代码简洁之道 ( PHP Clean Code)(第二部分).pdf

标签:函数   参数   很好   做法
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图