1. 一个子类如果implements一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可,这是抽象类的一个优点 2. 如果一个接口中定义的方法名改变了,那么所有实现此接口的子类显然将无法通过编译,因为它们所实现的方法名已经不存在了,这是接口的一个缺点;而抽象类就不存在这个问题,只是为子类添加了一个新的方法(接口中旧的方法) 3. 看前面两点,似乎抽象类要比接口有着更多的优点,但它却有着一个难以弥补的缺点:就是一个子类只能有一个父类。A extends B . 这样A就拥有了B的所有方法和功能,但当A还想拥有C的功能的时候。就不能通过 A extends C 来实现, 而需要走一些弯路。目前系统架构的趋势就是由针对抽象(借口,抽象类)而不是具体编程,并且将功能尽可能的细分。 这就需要通过实现多个接口的方式来实现,显然,抽象类无法提供这样的功能。从系统重构的角度来说,一个具体类抽象出接口是十分方便的。只需要写一个接口,里面定义具体类的所有方法,然后在为这个具体类implement这个接口就可以了。而抽象类就要复杂的多,比如说 B extends A , C extends B 如果想要为c抽象出一个抽象类D的话,就需要找到它的最顶层A来从头做起,因为无法做到C extends D
Browsing the archives for the php tag
interface a { //接口内不可以定义属性 //所有方法必须为抽象方法(既不实现,只定义) public function method1($param); protected function method2($param); } //接口不可被实现,例如 $instance = new a; //错误 //接口实现类必须实现接口的所有方法,且方法参数也必须相同 //例如 class b implaments a{ //错误,封装应与接口相同 protected function method1($param) { //somecode here… }
PHP的接口:为了实现特定功能而预留的类似类的一种类型。接口的主要目的:提供给类类似于模板的框架,以方便类的构建。 在PHP中定义接口 在PHP中定义接口的形式如下: Interface interfaceName { Const 1; …… Const 2; Function methodName1(); …… Function methodName2(); } PHP中单一接口的实现 实现接口的语法如下:
作者:Coralzd 博客:http://www.freebsdsystem.org 论坛:http://www.linuxtone.org (IT运维专家网|集群架构|性能调优) 欢迎转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 文档版本 V1.4 最后修改: 2010.6.10 09:33 FreeBSD简介: FreeBSD,是AT&T的后裔间接通过Berkeley Software Distribution(BSD)伯克利软件发行版UNIX,其漫长而动荡的历史可以追溯到1993年。不同于Linux发行版,这被定义为集成 Linux内核和数以千计的应用软件组成的解决方案,FreeBSD是一个紧密集成的操作系统基于BSD kernel和所谓的“userland(用户建造)”(因此,甚至没有额外的扩展程序)。发行版巨大失去了在普通电脑系统安装的机会 ? 像许多Linux发行版本,一个易于安装的(大部分)开放源码的应用扩展提供了FreeBSD的核心,但这些通常是由第三方捐助者提供的和不严格的 FreeBSD的一部分。
看到这个标题,大家可能要说我没常识,php根本不支持多线程啊,没错,php本身是不支持多线程,但是别忘了php的好搭档,apache和linux可是支持的,呵呵,lamp才是最佳组合,还在使用win服务器的现在知道为什么要用linux吧?好久没在phpchina说教了,今天水一帖,写个简单的代码演示下如何借助shell脚本实现多线程。 先写个简单的php代码,这里为了让脚本执行时间更长,方便看效果,sleep一下,呵呵!先看下test.php的代码: PHP代码: <?php for ($i=0;$i<10;$i++) { echo $i; sleep(10); } ?> 在看下shell脚本的代码,非常简单.
使用方法: $urls = array(“http://baidu.com”, “http://21andy.com”, “http://google.com”); $mp = new MultiHttpRequest($urls); $mp->start(); 下载: class_curl_multi.php
开始用php写后台服务一段时间了.也是在这样的驱动下,不断的学习php语法,体验这一原来一直以为神秘且敬而远之的神奇语言的魅力.最初看php多线程的资料是为了提高程序的处理能力,充分发挥linux多任务的优势.不曾想多线程没用成反到是带来了一系列的意外收获.让之后的许多问题迎刃而解,不敢独享特一一道来. 本文所讲的东西是源自php的pcntl_fork函数.因为这个函数依赖操作系统fork的实现,所以本文所讲的东西只适用于linux/unix.ok,那么先看看这个函数的用法吧.php手册上是这么说的: <?php $pid = pcntl_fork(); if ($pid == -1) { die(‘could not fork’); } else if ($pid) { // we are the parent pcntl_wait($status); //Protect against Zombie children } else { // we are the child } ?>
一直没有找到PHP有像JAVA一样的多线程机制,网上有的也只是使用get&post模拟出来的多线程。今天,偶尔看到PHP 4 >= 4.1.0, PHP 5有这个函数: pcntl_fork — Forks the currently running process Description int pcntl_fork ( void ) The pcntl_fork() function creates a child process that differs from the parent process only in its PID and PPID. Please see your system’s fork(2) man page for specific details as to how fork works on your [...]
最近的项目中有个地方需要对两段文字的相似度进行比较,以分析出用户的答案是否与正确答案一样,这里用了php系统自带的similar_text函数. <?php similar_text($row['title'], $title, $percent); //比较相似度 存放于$percent if($percent>90){$cf=1;break;} //飘易注:相似度高于90% 则判断重复 } ?>
1.__autoload() 2.class_exists() 3.get_class() 4.get_declared_class() 5.get_class_methods() 6.is_callable() 7.method_exists() g.get_class_vars() 9.is_subclass_of() 10.get_parent_class() 11.call_user_func() 12.call_user_func_array() 13.__call()