标签: php-8

与 PhpStorm 的连接未建立 Xdebug 3

下午好。

当尝试在 PHP 8 上调试脚本时,PhpStorm 报告与版本 3 xdebug 没有连接。适用于 3 以下的所有版本。我尝试将 xdebug.remote_{host, port} 的参数更改为 xdebug.client_{host, port} 但也没有帮助。

php xdebug phpstorm php-8

2
推荐指数
1
解决办法
3350
查看次数

如何在 PHP 中使用“Nullsafe 运算符”

有没有办法在php中使用Nullsafe operator条件?

php php-8

2
推荐指数
1
解决办法
1333
查看次数

PHP 8 方法覆盖同一基类的不同类型

我的项目在 PHP 7.X 上运行良好,升级到 PHP 8 后出现以下问题,我不知道如何解决此问题。

我有以下(简化)情况:

<?php

class Vehicle
{
    //...
}

class Car extends Vehicle
{
    //...
}


class VehicleOutputMaker
{
    public function output(Vehicle $entity)
    {
        
    }
}


class CarOutputMaker extends VehicleOutputMaker
{
    //THROWS EXCEPTION
    public function output(Car $entity)
    {
        parent::output($entity);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的整个项目是这样运行的,但是从 PHP 8 开始,我得到了该行的异常

public function output(Car $entity)

与“致命错误:*** 的声明必须与 *** 兼容”

它与 PHP 7 完美配合!因为“车”也是一种车辆。

有人知道如何解决这个问题吗?

谢谢!

php php-8

2
推荐指数
1
解决办法
2489
查看次数

PHP 8:如何在属性中声明关联数组

我有这个控制器注释:

/**
 * @Route("/", name="list", defaults={"_format": "html", "tag": ""})
 */
Run Code Online (Sandbox Code Playgroud)

我想将其转换为 PHP 8 属性。但是如何传递defaults参数的关联数组呢?这有效:

#[Route("/", name: "list", defaults: [])]
Run Code Online (Sandbox Code Playgroud)

但这不是:

#[Route("/", name: "list", defaults: ["_format": "html", "tag": ""])]
Run Code Online (Sandbox Code Playgroud)

我应该怎么做?

php attributes php-8

2
推荐指数
1
解决办法
1370
查看次数

Laragon 4.0.15 - 切换到 PHP 8 后 Apache 无法启动

在 Windows 10 Pro 上,下载 PHP 8 后,在 Laragon(PHP > 版本)中切换到它并重新启动 Apache,出现以下错误:

httpd: Syntax error on line 546 of
C:/laragon/bin/apache/httpd-2.4.35-win64-VC15/con...:
Syntax error on line 2 of
C:/laragon/etc/apache2/mod_php.conf: Can't locate
API module structure 'php8_module' in file
C:/laragon/bin/php/php-8.0.2-Win32-vs16-x64/php8a...:
No error
Run Code Online (Sandbox Code Playgroud)

php apache laragon php-8

2
推荐指数
1
解决办法
5046
查看次数

如何用 php 8 中的新属性替换 phpdocs

我正在使用拉拉维尔。我需要知道如何在 php 8 中使用属性编写 phpdoc。

/**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
      //Some code
      return [];
    }
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下上面的代码如何用属性来编写吗?

phpdoc php-8 php-attributes

2
推荐指数
1
解决办法
3438
查看次数

清空 $request-&gt;request 和 $request-&gt;带有 multipart/form-data 的文件

我正在尝试使用 AJAX 将带有文件的表单上传到我的服务器,但 Symfony 没有像应有的那样解析请求正文。这是我的 PHP:

#[Route('/api/upload/file', name: "api_upload_file", methods: ['POST'])]
public function create(Request $request): JsonResponse
{
    dump($request->files->all());
    dump($request->request->all());
    dump($request->getContent());
...
Run Code Online (Sandbox Code Playgroud)

和转储输出(文件部分被删除,因为它占用大量空间):

[]
Run Code Online (Sandbox Code Playgroud)
[]
Run Code Online (Sandbox Code Playgroud)
"""
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="subcategory"

1
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="main_image"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="more_images"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="original_version"


------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="version"


------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="original_title"


------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="title"
"""
Run Code Online (Sandbox Code Playgroud)

请求显然通过了,所以我不明白为什么内容没有被解析

以防万一,这里是 javascript 部分:(这看起来像 JQuery,但不是)

form.submit(e => {
        e.preventDefault();
        let formData = createItemForm.formData();
        $.ajax('/api/upload/file', {
            headers: {
                'Content-Type': 'multipart/form-data' …
Run Code Online (Sandbox Code Playgroud)

php ajax symfony php-8 symfony6

2
推荐指数
1
解决办法
4687
查看次数

PHP 8:将不可数值传递给计数函数时如何避免致命错误?

所以我升级到 PHP 8 并运行我的脚本,这给了我这个错误:

致命错误:未捕获的 TypeError:count():参数 #1 ($value) 必须是 Countable|array 类型,C:\xampp\htdocs\app\includes\functions\create_session.php:78 中给出的 null
堆栈跟踪:
# 0 C:\xampp\htdocs\public\front_desk.php(508): Session->check_subfeature_access(22, 0)
#1 {main} 抛出在 C:\xampp\htdocs\app\includes\functions\create_session.php 上78号线

事实证明,这是由于 PHP 8 中的新更新不允许在 count 函数中使用非数组值,并引发致命错误,阻止进一步的脚本执行。例如,如果您有 a$_POST['checkboxes_checked']并且您count($_POST['checkboxes_checked'])这样做了,那么它将给出上述错误,因为默认情况下它不会将其识别为数组。要修复此错误,您可以执行以下操作:count((array)$_POST['checkboxes_checked'])),这可以修复问题。

然而,我的情况的问题是,我有数百个文件需要修复此问题,我不想进入每个文件并修复此问题,因为这将非常耗时。有没有办法将 PHP 8 配置为忽略此问题并仍然使用这些 $_POST 参数继续执行 count 函数?或者某种搜索/替换正则表达式,我可以在所有替换为 的文件上count($_POST['some_parameter_name'])运行count((array)$_POST['some_parameter_name']))?老实说,我不知道如何在不手动进入每个文件的情况下解决这个问题,这就是我需要您帮助的部分。

php php-8

2
推荐指数
1
解决办法
2054
查看次数

未捕获的类型错误:join():参数 #2 ($array) 必须为 ?array 类型,给定字符串 / Highcharts 的 PHP8 数据

我的虚拟主机将 PHP 版本从 PHP7.4 更改为 PHP8。现在我的 Highcharts 不再显示,并且根据 Highcharts 系列数据我收到一条错误消息。

图表的数据来自mysql数据库。

这是错误:

Uncaught TypeError: join(): Argument #2 ($array) must be of type ?array, string given in testchart.php:64
Stack trace:
\#0 testchart.php(64): join(Array, ',')
\#1 {main}
thrown in testchart.php on line 64
Run Code Online (Sandbox Code Playgroud)

我的呼吁join()

data: [<?php echo join($tempA24, ',') ?>],
Run Code Online (Sandbox Code Playgroud)

这是包含数据库值的数组:


array(2) {
  [0] => array(2) {
    [0] => float(1667131200000)[1] => float(21)
  }
  [1] => array(2) {
    [0] => float(1667134800000)[1] => float(22)
  }
}
Run Code Online (Sandbox Code Playgroud)

php arrays highcharts php-8

2
推荐指数
1
解决办法
3267
查看次数

如何处理 Null 上的 array_shift() ?

请看一下这段代码:

$end = isset($newvar) ? array($newvar) : null;
while($ends = array_shift($end)){
  ...
Run Code Online (Sandbox Code Playgroud)

当我使用 PHP 时它运行良好7.2,但升级到 PHP 后8.1,它会抛出:

PHP 致命错误:未捕获类型错误:array_shift():参数 #1 ($array) 必须是数组类型,在 /path/to/qanda.php:469 中给出 null

知道如何修复它吗?

php fatal-error php-8

2
推荐指数
1
解决办法
150
查看次数