我在使用PHP7的Ubuntu 16.04服务器上运行laravel 5.4。尝试安装cviebrock/eloquent-sluggable软件包会引发一些错误: pish@let:/home/sherk/ftp/www$ sudo composer require cviebrock/eloquent-sluggable Do not run Composer as root/super user! See https://getcomposer.org/root for details Using version ^4.2 for cviebrock/eloquent-sluggable ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. …
更新:PHP 7.4现在确实支持协方差和逆方差,这解决了此问题中提出的主要问题。 我在PHP 7中使用返回类型提示遇到了一些问题。我的理解是,提示: self意味着您打算让实现类返回自身。因此,我: self在接口中使用它来表明这一点,但是当我尝试实际实现接口时,出现兼容性错误。 以下是我遇到的问题的简单演示: interface iFoo { public function bar (string $baz) : self; } class Foo implements iFoo { public function bar (string $baz) : self { echo $baz . PHP_EOL; return $this; } } (new Foo ()) -> bar ("Fred") -> bar ("Wilma") -> bar …
升级到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。 我仍然想知道其他错误和警告。 有没有一种干净而不错的方法来实现这一目标?
我已经更新了类定义,以利用新引入的属性类型提示,如下所示: class Foo { private int $id; private ?string $val; private DateTimeInterface $createdAt; private ?DateTimeInterface $updatedAt; public function __construct(int $id) { $this->id = $id; } public function getId(): int { return $this->id; } public function getVal(): ?string { return $this->val; } public function getCreatedAt(): ?DateTimeInterface { return $this->createdAt; } public …