提前使用 PHP 7.4 新特性造轮子的正确方式
PHP 7.4 已经实现了很多新功能,虽然我们不能在业务中使用,但是可以提前在轮子中预研发。
这不是什么技术,可以用来预研功能,php7.4 有太多语法的变动。
编译一个 PHP 7.4 版本
也可以盲敲,编译 http://amon.org/php74。
git clone -b PHP-7.4 https://github.com/php/php-src.git --depth=1 && cd php-src && ./buildconf
./configure --prefix=/usr/local/php74 --with-config-file-path=/usr/local/php74/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --disable-debug --with-curl --with-iconv --with-zlib --enable-bcmath --enable-ftp --enable-sockets --enable-mbstring --enable-mbregex --enable-soap --with-xsl --enable-opcache --with-mysqli --with-mysql-sock --with-pdo-mysql --enable-mysqlnd --disable-fileinfo --enable-gd --with-webp --with-jpeg --with-freetype --enable-gd-jis-conv --with-iconv-dir=/usr/local/lib LDFLAGS="-L/usr/lib -lz"
make ZEND_EXTRA_LIBS='-liconv'
make install
PHP 7.4.0-dev (cli) (built: May 5 2019 00:20:55) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0-dev, Copyright (c) Zend Technologies
新建分支
git checkout master
git checkout -b php74
持续集成加入 php7.4
.travis.yml
language: php
env:
global:
- MIN_PHP=7.3.2
- setup=stable
matrix:
include:
- php: 7.4snapshot
- php: 7.4snapshot
env: setup=lowest
fast_finish: true
sudo: false
cache:
directories:
- $HOME/.composer/cache
services:
- redis-server
- mysql
before_install:
- mysql -e "create database IF NOT EXISTS test;" -uroot
- phpenv config-add build/redis.ini
- travis_retry composer self-update
install:
- if [[ $setup = 'stable' ]]; then travis_retry composer update --prefer-dist --no-interaction --prefer-stable --no-suggest; fi
- if [[ $setup = 'lowest' ]]; then travis_retry composer update --prefer-dist --no-interaction --prefer-lowest --prefer-stable --no-suggest; fi
# Some debug info is located here
- ls -al `$(phpenv which php-config) --extension-dir`
- $(phpenv which php) -v
- $(phpenv which php) -m
script:
- mkdir -p logs
- mkdir -p build/logs
- php vendor/bin/phinx migrate -e testing
- php vendor/bin/phpunit -c phpunit.xml.dist --coverage-clover build/logs/clover.xml
after_success:
- travis_retry php vendor/bin/php-coveralls
- travis_retry php vendor/bin/php-coveralls -v
测试开发
属性类型
/**
* @var array
*/
// protected $map = [];
protected array $map = [];
/**
* 节点数据.
*
* @var array
*/
// protected $data = [];
protected array $data = [];
短闭包
protected function getExplodeData(string $data): array
{
/*
return array_map(function ($v) {
return (int) ($v);
}, explode(static::SEPARATE, $data));
*/
$data = explode(static::SEPARATE, $data);
return array_map(fn($v) => (int) ($v), $data);
}
https://github.com/hunzhiwange/framework/c...
https://github.com/hunzhiwange/framework/c...
等待发布 php7.4 合并
php7.4 发布后,如果 master 至少要求 php7.4 的话可以合并回去。