提前使用 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 的话可以合并回去。

xiaoniuge
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!