`
bardo
  • 浏览: 378133 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D1407912-ab64-3e76-ae37-b31aa4afa398
浅述PHP设计模式
浏览量:11799
9d6df9f7-91da-3787-a37c-0e826525dd5d
Zend Framewor...
浏览量:10110
85b628bd-a2ed-3de2-a4b1-0d34985ae8b6
PHP的IDE(集成开发环...
浏览量:9495
社区版块
存档分类
最新评论

PHP典型垃圾代码点评(1)

    博客分类:
  • PHP
PHP 
阅读更多

 从今天开始,陆续给大家点评一些垃圾代码。但愿对大家有帮助。

先看一段代码:

 

    /**
     * 启动事务
     * @access public
     * @return bool|mixed
     * @throws \Exception
     */
    public function startTrans()
    {
        $this->initConnect(true);
        if (!$this->linkID) {
            return false;
        }

        ++$this->transTimes;
        try {
            if (1 == $this->transTimes) {
                $this->linkID->beginTransaction();
            } elseif ($this->transTimes > 1 && $this->supportSavepoint()) {
                $this->linkID->exec(
                    $this->parseSavepoint('trans' . $this->transTimes)
                );
            }

        } catch (\PDOException $e) {
            if ($this->isBreak($e)) {
                return $this->close()->startTrans();
            }
            throw $e;
        } catch (\Exception $e) {
            if ($this->isBreak($e)) {
                return $this->close()->startTrans();
            }
            throw $e;
        } catch (\Error $e) {
            if ($this->isBreak($e)) {
                return $this->close()->startTrans();
            }
            throw $e;
        }
    }

 

 

     这是国内某开源十余年的知名框架的核心代码。

     很明显,虽然有什么try catch结构,但无法遮掩其代码功底之差,思路的初级。

     第一点,把数据库链接与事务搅在的一起。虽然用华丽的链式操作,但是,反而弄巧成拙。

     为什么这么说,因为,链接就是在此类中处理的。此类中就有函数:

     abstract protected function parseDsn($config);  所以,这完全违反了单一职责原则。

     当然,写在一起,处理得好就算了。可是,万万没有想到的是,在catch中并没有完全逃脱。

 

  因为,这一行:return $this->close()->startTrans();

 

  不是说,这一行重新开始有问题,但是,本质上,它根本没有重新开始,因为,

 

  前面有了什么?这一行:

 

  ++$this->transTimes;  

 

  这是在try catch之外的,本来就是一个记数器。可是,写这段代码的人可参没有想到, 你还没有beginTransaction 成功,你就把计数器给加了。 而出错时,并没有处理这个计数器。所以,这个框架数据库频繁出错,大家一定明白错在何处了。

 

  再看另一个代码:

    /**
     * Start a new database transaction.
     *
     * @return void
     * @throws \Exception
     */
    public function beginTransaction()
    {
        $this->createTransaction();

        $this->transactions++;

        $this->fireConnectionEvent('beganTransaction');
    } 
   /**
     * Create a transaction within the database.
     *
     * @return void
     */
    protected function createTransaction()
    {
        if ($this->transactions == 0) {
            try {
                $this->getPdo()->beginTransaction();
            } catch (Exception $e) {
                $this->handleBeginTransactionException($e);
            }
        } elseif ($this->transactions >= 1 && $this->queryGrammar->supportsSavepoints()) {
            $this->createSavepoint();
        }
    }
    

 

    这段代码思路就非常清晰,并且,代码简单易懂。 即beginTransaction未成功之前,什么都不做。

 当然,这是Laravel框架的代码。二者肯定不是一个级别! 

分享到:
评论

相关推荐

    php典型模块与项目实战源代码

    "php典型模块与项目实战源代码"这个资源提供了一个全面的学习平台,让你能够深入理解PHP的核心概念、常用模块以及实际项目的构建过程。这份全集包括了源代码目录、源代码文件、框架引擎介绍文档和源码,为学习者提供...

    PHP开发典型模块大全 代码 part1

    《PHP开发典型模块大全》是人民邮电出版社出版的一本专为PHP开发者设计的书籍,其涵盖了PHP开发中的核心模块和常见应用场景。该资源提供了书中的部分代码,主要涵盖第2章到第13章的内容,包括但不限于数据库交互、...

    PHP开发典型模块大全 代码 part2

    《PHP开发典型模块大全》是人民邮电出版社出版的一本专为PHP开发者设计的实践指南,涵盖PHP开发中的核心模块和常见应用场景。该书通过14至25章的深入讲解,提供了丰富的代码示例,旨在帮助读者掌握PHP编程的关键技巧...

    php聊天代码 韩国开源系统

    php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码php聊天代码...

    PHP开发典型模块全部代码1

    这个名为“PHP开发典型模块全部代码1”的压缩包,是由明日科技精心编写的,旨在帮助开发者深入理解和实践PHP编程。人民邮电出版社作为知名的技术图书出版机构,确保了这些代码的质量和实用性。 这个压缩包分为两大...

    PHP点评系统(开源代码)

    【PHP点评系统(开源代码)】是一个专门为初学者设计的学习资源,它提供了完整的PHP开发环境,可以帮助用户深入了解PHP编程语言的各个层面。这个开源项目,名为Modoer_GBK_1.0,不仅是一个功能齐全的点评系统,还是...

    代码规范+-+PHP+代码风格检查_修复工具_修复脚本_php_php编程_

    其中,PSR-1和PSR-2是最基础的代码风格规范,涵盖了命名约定、缩进、空格、注释等方面的规则。例如,PSR-2规定了代码应使用四个空格进行缩进,而非制表符;类、函数和常量的命名应采用驼峰式命名法;每行不应超过...

    PHP在线压缩代码PHP在线压缩代码

    PHP在线压缩代码PHP在线压缩代码PHP在线压缩代码PHP在线压缩代码

    php代码编写器

    1. **多文件编辑**:可以同时打开多个文件,方便在多个代码文件间切换,这对于处理大型项目尤其有用。 2. **代码折叠**:允许开发者隐藏和展开代码块,便于管理和理解复杂的代码结构。 3. **自动完成**:提供智能...

    PHP劫持跳转代码

    当我们谈论"PHP劫持跳转代码"时,这通常涉及到一种安全问题,即恶意攻击者利用PHP代码来控制或篡改网站的行为,使得用户在访问特定页面时被强制跳转到其他不受信任的网站。 PHP劫持跳转通常是通过注入恶意代码实现...

    php统计php代码行数程序

    在PHP编程环境中,有时我们需要了解项目中PHP代码的规模,比如为了分析代码复杂性、评估开发工作量或者优化性能。这时,我们可以编写一个程序来统计PHP代码的行数。下面将详细讲解如何实现这样一个功能,以及相关的...

    360通用php防护代码

    1.将360_safe3.php传到要包含的文件的目录 2.在页面中加入防护,有两种做法,根据情况二选一即可: a).在所需要防护的页面加入代码 require_once('360_safe3.php'); 就可以做到页面防注入、跨站 如果想整站防注,...

    高性能php7源代码

    《高性能PHP7源代码》是针对PHP开发人员深入理解PHP7内部机制的重要参考资料。PHP7作为PHP语言的一个重大版本更新,引入了许多优化措施,显著提升了性能。本资料将带领我们探索PHP7的源代码,揭示其高效运行的秘密。...

    PHP源码 php代码 10个救人的php代码

    10个救人的php代码 php源码 php代码

    php留言板代码,php留言板

    1. **PHP基础**:PHP是一种服务器端脚本语言,用于动态网页开发。在PHP留言板中,开发者会用到变量、条件语句、循环、函数、数组等基本语法,以及HTTP请求和响应、表单处理等Web开发概念。 2. **MySQL数据库**:...

    php典型模块与项目实战大全-明日科技 11-15章代码+其他内容

    《PHP典型模块与项目实战大全》是明日科技出版的一本专为PHP开发者设计的实践教程,涵盖了11至15章的重要内容。这本书的核心在于帮助读者深入理解和掌握PHP编程的关键技术,并通过实际项目来锻炼和提升技能。接下来...

    php代码审计入坑实践.pdf

    《PHP 代码审计入坑实践》是一篇针对初学者的指南,旨在介绍如何开始进行PHP代码的安全审计。本文主要利用了RIPS等工具,通过实际操作来帮助新手逐步理解代码审计的过程。 首先,文章提到了“场景”,这可能是指...

    易语言PHP代码翻译器源码

    《易语言PHP代码翻译器源码解析与应用探讨》 在IT行业中,代码翻译器扮演着重要的角色,它能够帮助开发者理解和转化不同编程语言之间的代码,从而提高开发效率和跨平台兼容性。本文将深入探讨易语言PHP代码翻译器...

    好用的PHP注册登录代码

    1. **变量接收:** - `$_REQUEST['zhanghao']`:接收用户输入的账户。 - `$_REQUEST['mm']`:接收用户输入的密码。 - `$_REQUEST['mima']`:接收用户再次确认的密码。 2. **密码一致性检查:** - 如果两次输入...

    官方php源代码 php-7.4.5.tar.gz

    《深入解析PHP 7.4.5源代码》 PHP,全称“PHP:Hypertext Preprocessor”,是一种广泛使用的开源脚本语言,尤其适用于Web开发,并可嵌入到HTML中。PHP 7.4.5是其发展过程中的一个重要版本,提供了许多改进和新特性...

Global site tag (gtag.js) - Google Analytics