下午好。
当尝试在 PHP 8 上调试脚本时,PhpStorm 报告与版本 3 xdebug 没有连接。适用于 3 以下的所有版本。我尝试将 xdebug.remote_{host, port} 的参数更改为 xdebug.client_{host, port} 但也没有帮助。
我的项目在 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 完美配合!因为“车”也是一种车辆。
有人知道如何解决这个问题吗?
谢谢!
我有这个控制器注释:
/**
* @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)
我应该怎么做?
在 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 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)
有人可以解释一下上面的代码如何用属性来编写吗?
我正在尝试使用 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 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 版本从 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) 请看一下这段代码:
$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-8 ×10
php ×9
ajax ×1
apache ×1
arrays ×1
attributes ×1
fatal-error ×1
highcharts ×1
laragon ×1
phpdoc ×1
phpstorm ×1
symfony ×1
symfony6 ×1
xdebug ×1