问题标签 [php-7.1]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
12924 浏览

php - PHP Traversable 类型提示

我有一个相对简单的功能,它使用foreach

我想输入提示,并且Traversable似乎是我需要的确切类型提示

但是,这会E_RECOVERABLE_ERROR在使用数组时给出 a (当然可以在 a 中使用foreach):示例

有没有办法输入提示或者这是不可能的?

0 投票
2 回答
9111 浏览

php - 使用返回类型声明返回 NULL

当我遇到问题时,我正在重构用于 PHP7 的代码库,特别是实现标量类型提示和返回类型提示。

我有一个具有一些属性的类,其中一个是 id。此 id 不是强制性的(您可以在不设置 id 的情况下构造对象)。在创建此类的新对象时,您不设置 id,并且一旦将其插入数据库(通过单独的映射器类),它就会获得一个 id。

这个映射器类需要检查对象是否已经存在于数据库中,它通过检查是否设置了 id 来做到这一点:

我正在对代码库中的每个函数应用返回类型提示,问题是如果我强制执行int返回类型,该函数getId()将无法返回NULL 。即使没有启用严格类型,它也会出现 TypeErrors:

致命错误:未捕获的 TypeError:ExampleClass::getId() 的返回值必须是整数类型,返回 null

我考虑过不为这个 getter 设置返回类型提示,但后来我意识到问题可能不是返回类型提示,而是我使用混合返回类型的事实。我记得在某处读到使用混合返回类型是一件坏事,但我不确定如何在不使用混合返回类型的情况下解决这个问题。我可以:

  • 在 getter 中抛出异常,并在映射器类中设计检查,以便捕获该异常。
  • 捕获 TypeError 异常,并使用它来指示 id 未设置。
  • 公开 id 属性,这样我就可以直接调用isset了。
  • 添加不同的方法hasId() return isset($this->id)

坦率地说,我不太喜欢这些解决方案,我想知道是否有更好的选择。这种情况的最佳做法是什么?

另外,如果我启用了严格输入,我不应该只得到一个 TypeError 吗?我认为 PHP7 默认为“弱类型提示”。

0 投票
8 回答
47327 浏览

php - 沉默 PHP 7 中的“声明......应该兼容”警告

升级到 PHP 7 后,日志几乎因此类错误而窒息:

PHP Warning: Declaration of Example::do($a, $b, $c) should be compatible with ParentOfExample::do($c = null) in Example.php on line 22548

如何在 PHP 7 中使这些错误和只有这些错误静音?

  • 在 PHP 7 之前,它们是可以轻松处理E_STRICT的警告类型。现在它们只是简单的旧警告。由于我确实想了解其他警告,因此我不能完全关闭所有警告。

  • 我没有重写这些遗留 API 的心理能力,更不用说使用它们的所有软件了。猜猜看,没有人会为此付出代价。我一开始都没有开发它们,所以我不是罪魁祸首。(单元测试?十年前不流行。)

  • 我想尽可能避免任何类似的诡计func_get_args

  • 我真的不想降级到 PHP 5。

  • 我仍然想知道其他错误和警告。

有没有一种干净又好的方法来实现这一点?

0 投票
1 回答
1729 浏览

php - Bug with multiple connections to Interbase with php 7

It seems PHP 7 changed a bit the way to work with the Interbase module.

Same code on PHP 5.6 works flawlessly.

If you have one open link to an Interbase/Firebird database and you open another one to the same database the first link it's closed.

One example of code can be:

DB_xxx are defined variables with the users, password, ..... of the database.

The result it's the same if instead of ibase_pconnect we write ibase_connect

If you run that code you won't get nothing, and on the page log you will see something like:

If we remove the line with the $conx2 all will work perfectly.

On my php.ini I have this (exactly the same than on PHP 5.6):

Interbase module for php7 has a new option which it's generating this problem ?

0 投票
1 回答
1662 浏览

php-7.1 - PHP 无效函数

PHP 7.1 将引入 void 函数类型。

https://wiki.php.net/rfc/void_return_type

在哪些情况下明确指定一个函数是“void”类型而不是简单地return;没有任何精度是有用的?

0 投票
0 回答
328 浏览

dmalloc - php7.1RC5 enable dmalloc编译报错

我只是想用 enable-dmalloc 构建 PHP7

环境:

使用了这个命令:

但它失败并出现错误消息:

我在 gdft.c、gdhelper.h 和 php.h 中看到了源代码,找到了这一行:

可能是 dmalloc 导致了这个错误,但我不知道为什么错误 msg show malloc.h,我检查了一下/usr/include,它有malloc.h两个dmalloc.h文件

我安装了包 libdmalloc 和 libdmalloc-dev 并尝试使用源代码重新安装 dmalloc 但它没有帮助

这些是什么原因造成的,我该如何处理?

0 投票
2 回答
717 浏览

php - PHP 7.1 中的隐式 void 返回?

我在这里找到了新规范:https ://wiki.php.net/rfc/void_return_type

问:你知道幕后发生了什么吗?该lacks_return函数实际上会返回void吗?

0 投票
1 回答
547 浏览

php - Windows 上的 PHP 7.1 x64 NTS 缺少 MongoDB 库

我正在寻找适用于 Windows 上 php 7.1 x64 NTS 的 php_mongodb.dll 扩展。

我知道 mongodb-driver 与 php 7.1 兼容,但我找不到适用于 windows 的预编译 dll 库...

我尝试自己编译它,但我没有掌握 C++,并且遇到了我自己无法解决的问题。

我按照本教程进行了构建过程

我在这里下载了适用于 Windows 的 PHP 7.1 源代码和二进制文件

有人能帮帮我吗 ?将不胜感激:)

0 投票
1 回答
3236 浏览

laravel - 如何在 MacOS 12 上为 Laravel 开发安装 php 7.1 的 mcrypt 扩展?

这让我发疯,遵循所有在线教程并没有帮助。

我刚刚升级到运行 MacOS Sierra (10.12.1) 的新 mac,并正在尝试配置我的开发环境。但是,每当我在我的项目上运行 composer update 或 composer install 时,我都会收到以下消息:

我已经运行了 brew install mcrypt 并且它已经安装了。

系统正在运行 php 7.1,所以我也运行了 brew install php71-mcrypt

extension=mcrypt.so 已包含在 php.ini 文件中,在我的机器上和我在 vagrant 机器上都试过了。

任何帮助将不胜感激,因为我已经在这 2 天了!

0 投票
1 回答
1752 浏览

php - 遇到格式不正确的数值 - 无法重现

我收到一个无法重现的错误。

以下代码是防止攻击的模块的一部分。这个特定的片段正在跟踪我从特定机器人用户代理获得的点击次数。

经过多年无故障使用,我突然收到错误:

遇到格式不正确的数值;

这发生在以下行:

$time 的值为2016-10-02 19:33:42

函数 safefilename() 返回:

Mozilla-5-0-compatible-spbot-5-0-3-http-OpenLinkProfiler-org-bot

正在写入和读取的文件的名称是:

bot_2016-10-02--19-33-42_Mozilla-5-0-compatible-spbot-5-0-3-http-Open_104.131.179.5.log

方法

下面的代码针对机器人并写入基于用户代理和文件创建时间的文件名。每次使用该用户代理时,它都会在文件中添加一个“X”,以便我可以跟踪该代理访问了多少次。如果机器人针对我的次数超过一定次数,我会阻止它。

下面的代码在测试和生产中产生了期望的结果——当然,抛出这个错误时除外。提到的文件有6个字节写入它,所以它之前已经成功读取和写入了5次。

php 错误记录在 06:37:04 并且我的服务器日志文件显示了这些命中:

104.131.63.140 - - [10/Dec/2016:06:36:59 -0800] "GET /robots.txt HTTP/1.1" 301 257 "-" "Mozilla/5.0 (compatible; spbot/5.0.3; +http://OpenLinkProfiler.org/bot )"

104.131.63.140 - - [10/Dec/2016:06:36:59 -0800] "GET /robots.txt HTTP/1.1" 200 1460 "-" "Mozilla/5.0 (compatible; spbot/5.0.3; +http://OpenLinkProfiler.org/bot )"

104.131.63.140 - - [10/Dec/2016:06:37:04 -0800] "GET / HTTP/1.1" 403 937 "-" "Mozilla/5.0 (compatible; spbot/5.0.3; +http://OpenLinkProfiler.org/bot )"

104.131.63.140 - - [10/Dec/2016:06:37:05 -0800] "GET / HTTP/1.1" 301 247 "-" "Mozilla/5.0 (compatible; spbot/5.0.3; +http://OpenLinkProfiler.org/bot )"

PHP 代码 我提取了以下代码,可以单独运行以进行测试。