为啥在 php 7 中添加回调类型提示会触发弃用警告
Posted
技术标签:
【中文标题】为啥在 php 7 中添加回调类型提示会触发弃用警告【英文标题】:Why does adding callback typehint in php 7 trigger deprecation Warning为什么在 php 7 中添加回调类型提示会触发弃用警告 【发布时间】:2020-10-09 02:18:54 【问题描述】:我有下面的代码。相当简单的东西。但是,它会发出警告:Deprecated: Non-static method Foo::bar() should not be called statically in test.php on line 13
如果我向 $method 参数添加类型提示(例如,可调用的 $method),则会收到 2 个警告。如果我删除类型提示,则不会发出警告。它实际上似乎也触发了 spl 自动加载过程(如果需要)。
有人知道为什么吗?这是一个错误,还是我做错了什么?
谢谢
<?php
class Foo
public function bar()
echo 'baz';
function justReturn($method): callable
return $method;
justReturn([Foo::class, 'bar']);
【问题讨论】:
【参考方案1】:bar
不是静态方法,所以需要通过对象来调用,例如
$foo = new Foo;
$foo->bar();
如果您希望它在没有对象的情况下可调用,则需要将其声明为静态。
static public function bar()
echo "baz";
【讨论】:
感谢您的尝试,但您错过了重点。很明显,它不是静态的,也不应该是静态的。实际上,要使其可调用,它需要是静态的,或者第一部分应该是对象的实例。问题是,如果“justReturn”函数不存在 typehint,为什么它会起作用,如果设置了 typehint,它会发出警告?因为如您所见,我没有对方法 bar() 进行任何实际调用 刚刚意识到我回答了自己的问题。该方法并不是真正静态的,我假设添加类型提示将测试它是否存在/是否正确。感谢您指出我的答案以上是关于为啥在 php 7 中添加回调类型提示会触发弃用警告的主要内容,如果未能解决你的问题,请参考以下文章