我正在尝试处理标量类型和PHP中的类型提示。更具体地说,我正在尝试创建一些示例界面,以尝试学习如何在项目中使用界面,并查看是否可以制作出一些真正有用的类模板。
据我了解,接口定义方法而不定义方法。使开发人员可以灵活地创建基于相同原理但执行方式不同的多个类(例如,创建数据库接口并具有PDOHandler和MysqliHandler类。
对我来说,我的意思是您可以键入提示参数而不必在每个类中进行实际操作。
我设置了一个实验对此进行测试,并使用了以下代码:
<?php
#commenting this out allows ->init(4) to work with foobar
declare(strict_types = 1);
interface Foo
{
public function init(?string $str);
}
class Bar implements Foo
{
public function init($str)
{
return gettype($str);
}
}
class FooBar implements Foo
{
public function init(?string $str)
{
return gettype($str);
}
}
$bar = new \Bar();
$foobar = new \FooBar();
echo $bar->init('4'). "\r\n";
echo $bar->init(4);
echo '<br />';
echo '=========================================================================';
echo '<br />';
echo $foobar->init('4');
echo $foobar->init(4); # this errors as expected
理想情况下,我想在接口中设置标量类型,以减少实现接口的类中的重复。有办法吗?还是我必须在所有类中明确声明标量类型?
编辑:抽象类
我的抽象类代码:
<?php
declare(strict_types = 1);
abstract class FooBar
{
abstract public function test(?string $str);
}
class Trey extends FooBar
{
public function test($str)
{
return gettype($str);
}
}
$trey = new \Trey();
echo $trey->test(4); = this works, when I'd expect it to fatal error
与上述相同,但问题是应用于抽象类。