PHP面向对象:接口与抽象方法

来源:互联网 发布:淘宝店铺怎么修改域名 编辑:程序博客网 时间:2024/05/16 16:57

原文地址:点击打开链接


接口(interface)是抽象方法和静态常量定义的集合。

接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。

接口中没有其它类型的内容。

我们先写接口的定义,下面的例子是接口的一个简单写法。

1interface 接口名{
2}

下面的例子定义了一个接口 User ,这个接口中有两个抽象方法,getName() 和 setName()。能看到接口的写法和类很相似。

1<?
2interface User {
3    function getName();
4    function setName($_name);  
5}
6?>

注意,在接口中只能有抽象方法。如果在接口中出现了非抽象方法,会报错如下:

Interface function User::setName() cannot contain body in ……….

1<?
2interface User {
3    function getName();
4    function setName($_name){} 
5}
6?>

程序运行如下:

1Fatal error: Interface function User::setName() cannot contain body in E:\PHPProjects\test.php on line 4

在接口中的抽象方法只能是public的,默认也是public权限。

并且不能设置成 private 或者 protected 类型。

否则会报错如下:

Access type for interface method User::setName() must be omitted in —on line —

在接口中,访问类型必须忽略。

1<?
2interface User {
3    public function getName();
4    private function setName($_name);  
5}
6?>

程序运行如下:

1Fatal error: Access type for interface method User::setName() must be omitted in E:\PHPProjects\test.php on line 4

protected访问权限也会有问题

1<?
2interface User {
3    public function getName();
4    protected function setName($_name);
5}
6?>

程序运行如下:

1Fatal error: Access type for interface method User::setName() must be omitted in E:\PHPProjects\test.php on line 4

即使abstract 和 final 修饰符不能修饰接口中的抽象方法。

1<?
2interface User {
3    final function getName();
4    abstract  function setName($_name);
5}
6?>


        类名和接口名不能相同

       

<?phpinterface lito{        public function get_name();    public function get_age();}class lito implements lito{        protected $name;    protected $age;    protected $weight;    protected $country;        function get_name(){            }        function get_age(){            }    }
会报错

( ! ) Fatal error: Cannot redeclare class lito in E:\wamp\www\oop\interface.php on line 9Call Stack#TimeMemoryFunctionLocation10.0000242968{main}( )..\interface.php:0


0 0