标签: php-8.2

PHP 8.3 中是否有针对特定类的对象数组的类型提示?

是否有类型提示允许PHP 8.3使用ExampleClass[]它来声明它是该类的对象数组ExampleClass


在我的具体情况下,ExampleClass称为Task

我想要但不起作用:

private Task[] $tasks;
Run Code Online (Sandbox Code Playgroud)

我的 PHPStorm IDE 告诉我,只有在 doc 类型中才允许使用复数类型
——也就是说,只有在PHPDocusing中Tasks[]才完全可以。但我想使用纯 PHP

错误PHP Parse error: syntax error, unexpected token "[", expecting variable


如果我只需要一个对象Task而不是一组对象,Task[]那么它可以使用:

private Task $task;
Run Code Online (Sandbox Code Playgroud)

这是我当前的工作解决方法:

private array $tasks;
Run Code Online (Sandbox Code Playgroud)

php type-hinting php-8.1 php-8.2

29
推荐指数
2
解决办法
2万
查看次数

PHP 创建动态属性已被弃用,AllowDynamicProperties 不起作用

我正在使用当前不支持 PHP 8.2 的第 3 方作曲家库,并尝试为我的应用程序添加兼容性。

3rd 方包具有以下类:

class Configuration { }
class ApiClient extends Configuration { }
Run Code Online (Sandbox Code Playgroud)

然后我有另一个扩展:

class MyApiClient extends ApiClient { }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[E_DEPRECATED] Creation of dynamic property MyApiClient::$propertyName is deprecated

修复应该添加#[AllowDynamicProperties],但这实际上并没有做任何事情。

我有以下内容:

#[AllowDynamicProperties]
class MyApiClient extends ApiClient { }
Run Code Online (Sandbox Code Playgroud)

并且仍然收到弃用错误。

我什至编辑了底层库文件,最终得到以下内容:

#[AllowDynamicProperties]
class Configuration { }

#[AllowDynamicProperties]
class ApiClient extends Configuration { }

#[AllowDynamicProperties]
class MyApiClient extends ApiClient { }
Run Code Online (Sandbox Code Playgroud)

但弃用错误仍然存​​在。

我有点不知所措,因为我看不出这些属性没有理由不生效。我缺少什么?我肯定正在编辑正确的文件,并且如果我在弃用错误中定义了属性,MyApiClient则会消失。

编辑:

作为一个似乎需要的更清晰的例子:

class Configuration
{
    public function __construct() …
Run Code Online (Sandbox Code Playgroud)

php php-8.2

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

无法在 Ubuntu 18.04 上安装 PHP-FPM

我无法在 Ubuntu 18 中安装 php8.2-fpm,这是我的安装命令:

sudo apt install lsb-release apt-transport-https ca-certificates software-properties-common -y
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2
Run Code Online (Sandbox Code Playgroud)

这是响应,包括错误:

$ sudo apt-get install php8.2 php8.2-fpm
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package php8.2
E: Couldn't find any package by glob 'php8.2'
E: Couldn't find any package by regex 'php8.2'
E: Unable to locate package php8.2-fpm
E: Couldn't find any package by glob 'php8.2-fpm'
E: Couldn't find …
Run Code Online (Sandbox Code Playgroud)

php ubuntu-18.04 php-8.2

5
推荐指数
1
解决办法
1万
查看次数

PHP 和 PHPUnit:如何调用参数类型错误的方法(或函数)然后成功?

我想测试(使用 PHPUnit)一个包含 foreach 循环的方法。我想要完整的路径覆盖。原始代码有点太复杂,所以我在下面创建了一个最小的示例来说明我的问题。foreachPHP中的循环有3种情况。(我使用 PHP 8.2。)

\n
    \n
  1. 空可迭代的东西。
  2. \n
  3. 不是空的可迭代的东西。
  4. \n
  5. 不可迭代的东西。
  6. \n
\n
    public function dodo(array $a)\n    {\n        foreach ($a as $one) {\n            return $one;\n        }\n\n        return null;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

很容易涵盖前两个:非空数组和空数组。但是我如何传递一个不可迭代的东西作为函数参数呢?我尝试了几种方法,但我\xe2\x80\x99已经得到了类型错误。

\n
$something->dodo(null); # TypeError\n\ncall_user_func([$something, 'dodo'], null); # TypeError\n\n$rClass = new ReflectionClass($something);\n$rMethod = $rClass->getMethod('dodo');\n$rMethod->invoke($something, null); # TypeError\n
Run Code Online (Sandbox Code Playgroud)\n

我不想\xe2\x80\x99 不想从方法定义中删除或更改类型。这会使代码的可读性降低一些。有办法解决吗?如何编写一个涵盖 foreach 循环的所有情况的测试?

\n

换句话说:\n我如何使用dodo错误类型的参数调用?我想编写具有非常高的代码路径覆盖率的测试。

\n

php phpunit type-hinting php-8.2

3
推荐指数
2
解决办法
471
查看次数

如何替换已弃用的动态属性?

我\xe2\x80\x99m 在 PHP 8.2\xe2\x80\x99s 动态属性弃用方面遇到了困难。I\xe2\x80\x99m 在这里寻找与 PHP 9.0 兼容的永久解决方案,因此添加属性#[AllowDynamicProperties]对我来说不是一个解决方案。

\n

这里\xe2\x80\x99是我的问题。例如,我曾经有以下课程:

\n
class planet {\n    function __construct($id, $a, $m, $i, $e, $\xcf\x80) {\n        $this->a = $a;\n        $this->e = $e;\n        $this->i = $i;\n        $this->id = $id;\n        $this->m = $m;\n        $this->n = .9856076686 / ($a * sqrt($a));\n        $this->\xcf\x80 = $\xcf\x80;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

然后我将使用以下数组创建每个行星:

\n
$pl = [\n    new planet("Mercury", .38709831, 3.3011e23, 7.004986, .20563, 77.456119),\n    new planet("Venus", .723332982, 4.8675e24, 3.394662, .006772, 131.563703)\n];\n
Run Code Online (Sandbox Code Playgroud)\n

等等。

\n

如果我现在尝试这个,我当然会收到现在著名的通知:\nDeprecated: Creation of …

php php-8.2

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

标签 统计

php ×5

php-8.2 ×5

type-hinting ×2

php-8.1 ×1

phpunit ×1

ubuntu-18.04 ×1