interface中关键字abstract的含义是什么? 我正在尝试在界面中编写抽象关键字。
<?php
interface I
{
abstract function test ();
}
class A implements I{
public function test ($offset)
{
}
}
$x=new A();
?>
获取错误:
Fatal error: Access type for interface method I::test() must be omitted in test.php on line 4
但是这里所有的方法都是抽象的http://www.php.net/manual/en/class.arrayaccess.php,我已经实现了这个工作正常。
答案 0 :(得分:2)
来自php.net (http://www.php.net/manual/en/language.oop5.abstract.php)
“PHP 5引入了抽象类和方法。定义为抽象的类可能无法实例化,任何包含至少一个抽象方法的类也必须是抽象的。定义为抽象的方法只是声明方法的签名 - 他们无法定义实现。“
答案 1 :(得分:1)
接口是一个空类,只包含方法的声明。所以 实现此接口的类必须包含声明的函数。所以, 界面只是一个严格的裁决,这有助于扩展任何类和严格 实现接口中定义的所有方法。
当一个方法声明为abstract时,意味着子类必须覆盖它 方法。抽象方法不应包含定义它的任何主体。一个 abstract方法可以声明如下: abstract public function test();
如果您仔细阅读上面的段落,那么您可以理解界面中的所有方法都是抽象的。
我认为你很困惑因为抽象关键字在功能之前显示。
ArrayAccess {
/* Methods */
abstract public boolean offsetExists ( mixed $offset )
abstract public mixed offsetGet ( mixed $offset )
abstract public void offsetSet ( mixed $offset , mixed $value )
abstract public void offsetUnset ( mixed $offset )
}
这里抽象显示函数是抽象函数。
答案 2 :(得分:0)
接口是类的定义。它指定了为实现接口而需要存在的一些方法。
抽象是您扩展的接口和父类的组合。它有一些方法你必须像接口一样实现,但也有一些定义的方法。
要使代码生效,您需要从方法中删除abstract关键字,或者将类定义更改为抽象,而不是接口。在这两种情况下,您还需要更改test
方法的签名以匹配实现类中的定义(添加$ offset参数)。