升级到 php7.2
Laravel 5.2. 本地开发环境 php7.1, 线上 php7.0. 要把 php7.0 升级到 php7.2.
目前遇到的问题就是 each,count 这两个.
each 废弃
count 只能 countable type 的变量
以下是遇到一些小问题. 做个记录.
1. ModulesServiceProvider.PHP (这个是我自己的文件) The each() function is deprecated. This message will be suppressed on further calls
- while (list(, $module) = each($modules)) {
- // Load the routes for each of the modules
- if (file_exists(__DIR__ . '/' . $module . '/routes.php')) {
- include __DIR__ . '/' . $module . '/routes.php';
- }
- // Load the views
- if (is_dir(__DIR__ . '/' . $module . '/Views')) {
- $this->loadViewsFrom(__DIR__ . '/' . $module . '/Views', $module);
- }
- }
PHP 7.2 废弃了 each .while(...each..) 改成 foreah 即可
修改为
- foreach ($modules as $module) {
- // Load the routes for each of the modules
- if (file_exists(__DIR__ . '/' . $module . '/routes.php')) {
- include __DIR__ . '/' . $module . '/routes.php';
- }
- // Load the views
- if (is_dir(__DIR__ . '/' . $module . '/Views')) {
- $this->loadViewsFrom(__DIR__ . '/' . $module . '/Views', $module);
- }
- }
- 2. ErrorException in Builder.PHP line 772:
- count(): Parameter must be an array or an object that implements Countable
问题定位到了. in Builder.PHP line 772
at HandleExceptions->handleError('2', 'count(): Parameter must be an array or an object that implements Countable', 'F:\iProject\afp\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php', '772', array('query' => object(Builder), 'boolean' => 'and'))
问题源
- public function addNestedWhereQuery($query, $boolean = 'and')
- {
- if (count($query->wheres)) {
- $type = 'Nested';
- $this->wheres[] = compact('type', 'query', 'boolean');
- $this->addBinding($query->getBindings(), 'where');
- }
- return $this;
- }
我打印
修改为
- if ($query->wheres != NULL && count($query->wheres)) {
- $type = 'Nested';
- $this->wheres[] = compact('type', 'query', 'boolean');
- $this->addBinding($query->getBindings(), 'where');
- }
但是这样就动了框架了. 我以为新框架会对这段做改变. 我之后下载了 Laravel 5.7 的框架. 这段代码没变.
3. 当我开始测脚本的时候
- $ APP_ENV="test" php72 artisan CategoryCron
- count(): Parameter must be an array or an object that implements Countab
定位. 在处理异常的地方打印行数与文件
- int(67)
- string(68) "F:\iProject\afp\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php"
找到代码
- public function release(EasyHandle $easy)
- {
- $resource = $easy->handle;
- unset($easy->handle);
- if (count($this->handles)>= $this->maxHandles) {
- curl_close($resource);
跟上面一样.$this->handles 为 null 所以才报错了. 兼容方式跟问题 2 一样.
参考:
*《PHP 7.2 一些注意事项.,php7.2 注意事项》 http://www.bkjia.com/PHPjc/1235440.html
*《从 PHP 7.1.x 移植到 PHP 7.2.x》 http://php.net/manual/zh/migration72.php 可以看官网文档了解下, 新特性以及兼容等等
来源: http://www.jianshu.com/p/1fd2df264c2e