PHP User Guide

PHP 简明用户指引

安装

CentOS

安装 PHP 7.0+ 需要安装扩展 Yum 源

# PHP 7.0.x from IUS
sudo yum install mod_php70u php70u-mysqlnd php70u-pecl-redis php70u-xml php70u-gd php70u-devel php70u-mbstring php70u-opcache php70u-pdo php70u-pear php70u-soap

macOS

Ubuntu

凭借第三方安装源可实现多版本 PHP 共存

export LC_ALL=C.UTF-8
sudo add-apt-repository ppa:ondrej/php
sudo add-apt-repository ppa:ondrej/nginx           # Stable
sudo add-apt-repository ppa:ondrej/nginx-mainline  # New Features
sudo add-apt-repository ppa:ondrej/apache2
# PHP 7.0
sudo apt install php7.0 php7.0-mbstring php7.0-mysql php7.0-opcache php7.0-json php7.0-xmlrpc php7.0-readline php7.0-zip php7.0-gd php7.0-bcmath php7.0-gd php7.0-fpm php7.0-curl php7.0-cli php7.0-xml php7.0-mcrypt
# PHP 7.1
sudo apt install php7.1 php7.1-mbstring php7.1-mysql php7.1-opcache php7.1-json php7.1-xmlrpc php7.1-zip php7.1-bcmath php7.1-gd php7.1-fpm php7.1-curl php7.1-cli php7.1-xml php7.1-mcrypt
# PHP 7.2
sudo apt install php7.2 php7.2-mbstring php7.2-mysql php7.2-opcache php7.2-json php7.2-xmlrpc php7.2-zip php7.2-bcmath php7.2-gd php7.2-fpm php7.2-curl php7.2-cli php7.2-xml
# 切换默认 PHP 版本
update-alternatives --config php
# Apache2 + PHP 默认版本 @ Ubuntu 16.04
sudo apt install libapache2-mod-php php7.0 php7.0-mbstring php7.0-mysql php7.0-xmlrpc php7.0-readline php7.0-zip php7.0-gd php7.0-bcmath php7.0-gd php7.0-curl php7.0-cli php7.0-xml php7.0-mcrypt php7.0-fpm

MAMP

安装 pecl 扩展

MAMP 支持多个版本的 PHP 引擎,安装扩展时需要先用 export 调整 PATH 来调整默认的 PHP 版本:

export PATH=/Applications/MAMP/bin/php/php7.0.26/bin:$PATH
pecl install redis

 装完扩展后在 MAMP 中编辑对应的 PHP 配置模版激活扩展:

extension=redis.so

常用特性

命名空间

无命名空间的代码都属于全局命名空间。

<?php
# 声明
namespace online\moha; # 声明命名空间需要在 <?php 后第一行开始。

# 导入命名空间下的类,避免重复输入全名
use Symfony\Component\HttpFoundation\Response;

# 导入并创建别名
use Symfony\Component\HttpFoundation\Response as Res;

# 多重导入
use Symfony\Component\HttpFoundation\Request,
    Symfony\Component\HttpFoundation\Cookie;

# 导入函数 PHP 5.6+
use func online\moha\common\moha_start_with;

# 导入常量 PHP 5.6+
use constant online\moha\common\SECONDS_IN_YEAR;
<?php
# 一个 PHP 文件,多个命名空间
namespace online\moha\wx {

}

namespace online\moha\qr {

}
<?php
namespace online\moha;

# 没有指明命名空间的代码在全局命名空间中。
# 在命名空间下引用全局命名空间下的代码,需要用 \ 限定,否则非限定类 Exception 将被解释为 online\moha\Exception。
throw new \Exception();

性状

PHP 5.4 开始支持,用于将共通代码注入多个无关的类以实现代码复用。

<?php

# 定义性状
trait TRAIT_NAME {
  public function FUNCTION_NAME() {

  }
}

# 使用性状,PHP 运行时会复制性状代码到类中。
class CLASS_NAME {
  use TRAIT_NAME;
}

$obj = new CLASS_NAME();
$obj->FUNCTION_NAME();

常用命令

启动内置 http 服务

常用语句

日期处理

# 

常见错误

未找到 autocconf

$ pecl install redis
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading redis-4.2.0.tgz ...
Starting to download redis-4.2.0.tgz (235,569 bytes)
.................................................done: 235,569 bytes
25 source files, building
running: phpize
Configuring for:
PHP Api Version:         20151012
Zend Module Api No:      20151012
Zend Extension Api No:   320151012
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

解决方案

brew install autoconf
Author: njun
njun's picture
Updated: 2019/11/12