浅谈PHP异常处理

阅读目录

1、PHP中异常的独特性

  PHP中的异常的独特性,即PHP中的异常不同于主流语言C++、java中的异常。在Java中,异常是唯一的错误报告方式,而在PHP中却不是这样,而是把所有不正常的情况都视作了错误进行处理。这两种语言对异常和错误的界定存在分歧。什么是异常什么是错误,两种语言的设计者存在不同的观点。

  PHP中的异常:

  是程序在运行中出现不符合预期的情况及与正常流程不同的状况。一种不正常的情况,按照正常逻辑本不该出的错误,但仍然会出现的错误,这是属于逻辑和业务流程的错误,而不是编译或者语法上的错误。

  PHP中的错误:

  是属于php脚本自身的问题,大部分情况是由错误的语法,服务器环境导致,使得编译器无法通过检查,甚至无法运行的情况。warning、notice都是错误,只是他们的级别不同而已,并且错误是不能被try-catch捕获的。

   在PHP中遇到任何自身错误都会触发一个错误,而不是抛出异常。PHP一旦遇到非正常代码,通常都会触发错误,而不是抛出异常。因此,如果想要使用异常处理不可预料的问题,是办不到的。

……

分类至 PHP
0条评论

PHP 数组 array_key_exists 与 isset 的区别

isset() 对于数组中为 NULL 的值不会返回 TRUE,而 array_key_exists() 会。 

<?php
$search_array = array('first' => null, 'second' => 4);

// returns false
isset($search_array['first']);

// returns true
array_key_exists('first', $search_array);
?> 

isset —— 检测变量是否已设置并且非 NULL。

array_key_exists —— 检查数组里是否有指定的键名或索引,跟值无关。

另外,手册评论里有人测试过,isset 的速度比 array_key_exists 要快一些。

分类至 PHP
0条评论

用 docker-compose 构建 lnmp 开发环境

基于 docker-compose,一键构建 lnmp 开发环境。搭建成功后,包含的容器/软件版本如下:

容器名称 基础镜像 当前安装成功版本
web-php php:7.2-fpm 7.2.21
web-nginx nginx:stable 1.16.0
web-mysql mysql:5.7 5.7.27
web-redis redis:latest 5.0.5

每个容器都是基于官方镜像构建。由于 php-fpm 官方镜像默认很多扩展没装上,这里单独做了一个 Dockerfile 文件来补充安装。

分类至 Docker
0条评论