PHP中接口的议论

Jun 13, 2016 am 10:49 AM
function php public user

PHP中接口的讨论
文章转载自重庆PHP,原文地址:http://www.php-chongqing.com/index.php/article/107


很多人都问我,PHP的接口有什么用?什么时候用?什么地方用?
首先我们来看什么是接口?
接口不是类,和类相似。主要用来描述类具体有什么功能(方法),但并不实现具体的功能,只起定义作用,具体功能由实现接口的类实现(implement),一个类可以实现一个或多个接口。
一般的动态语言都没有接口,但是PHP5中有,在PHP中定义接口:

interface User {    public function eat();    public function sleep();}
Salin selepas log masuk

实现接口:
class Chinese implements User {    public function eat() {	echo "eat chinese food!";    }    public function sleep() {	echo "sleep..."    }}
Salin selepas log masuk


上面的代码在PHP编程中到底有什么意义呢?从实践的角度出发,PHP中接口的作用几乎为0,完全是鸡肋,上面的代码我们不定义接口,直接定义一个Chinese类也可以正常的工作,完全没有任何问题。目前PHP5中的接口,顶多只能用作类型提示,仅此一用而已。当然,类型提示可以让我们的某些设计更为清晰。

我们来看看怎样利用接口来完成类型提示(其实意义并不大)。

public function doSomething($user) {    $user->eat();}
Salin selepas log masuk


假如方法doSomething()需要传递一个User对象的实例,有可能使用这个方法的用户并不清楚$user是User对象的实例,所以有可能将代码写成下面这样:

$user = "bing.peng";$test->doSomething($user);
Salin selepas log masuk
Salin selepas log masuk

那么当程序试图执行$user->eat()方法时,就会失败,因为用户并没有传入期望对象。我们来为doSomething()方法加入类型提示:
public function doSomething(User $user) {    $user->eat();}
Salin selepas log masuk

这样用户就可清晰的知道doSomething()需要的是User对象,从而避免一些低级的错误。但是由于PHP是动态语言,所以你还是可以乱写,如下:
$user = "bing.peng";$test->doSomething($user);
Salin selepas log masuk
Salin selepas log masuk

执行代码时,你还是会失败,类型提示的作用也没有多大的意义,所以实践中PHP接口的作用几乎为0,我们平白无故的还会多出一段接口定义代码,如果你将接口代码放到一个单独的文件中,那么打开这些文件还需要花费时间,尽管它很少。

顺便说下我个人对PHP目前发展的一点小小的看法吧,PHP为了适应企业级开发,增加了很多面向对象的新特性,很多东西都是直接从Java中拿过来,比如接口,但是动态语言中真的不太需要接口这东西;比如类型提示,其实用处并不大。现在的PHP越来越复杂化了,有点不伦不类了,逐渐的背离了人民群众,要知道PHP能成为web开发第一语言,主要原因就是在于草根、简单,希望PHP的发展能越来越好。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Tarikh dan Masa CakePHP

Konfigurasi Projek CakePHP Konfigurasi Projek CakePHP Sep 10, 2024 pm 05:25 PM

Konfigurasi Projek CakePHP

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Muat naik Fail CakePHP

Penghalaan CakePHP Penghalaan CakePHP Sep 10, 2024 pm 05:25 PM

Penghalaan CakePHP

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

Bincangkan CakePHP

Panduan Ringkas CakePHP Panduan Ringkas CakePHP Sep 10, 2024 pm 05:27 PM

Panduan Ringkas CakePHP

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP

See all articles