1105PHP笔记001

关于抽象类:
abstract class Car{
abstract function getMaximumSpeed();
}
class FastCar extends Car{
function getMaximumSpeed(){
return 150;
}
}
注意事项:
如果实现的类也是抽象的,则不用实现它的全部方法。
$street ->addCar(new FastCar());
-------------------------
接口:interface implements
父类和子类之间有逻辑上的层次关系的时候,用抽象类。
差别较大的两个或更多对象之间的特定交互行为,用接口。

接口
使用接口,你可以指定某个类必须实现那些方法,但是不需要定义这些方法的具体内容,我们可以通过interface来定义一个接口,就像定义标准类一样,但其中定义所有的方法都是空的,接口中定义的所有的方法都必须是public
实现一个接口,可以使用implement操作符,类中必须实现接口中定义的所用的方法,如果实现多个接口,可以用逗号来分割多个接口的名称
注意
实现多个接口时,接口中的方法不能有重名
接口也可以继承,通过使用extends操作符
接口中可以定义常量,接口常量和类常量的使用完全相同,他们都是定值,不能被子类或子接口修改
例子:

//声明接口
interface Itemplate{
public function setVariable($name,$var);
public function getHtml($template);
}
//实现接口
class Template implements Itemplate{
private $vars=array();
public function setVariable($name,$var){
$this->vars[$name]=$var;
}
public function getHtml($template){
foreach($this->vars as $names=>$value){
$template=str_replace(‘{‘.$names.‘}‘,$value,$template);
}
return $template;
}
}
  例子2:
interface a{
public function foo();
}
interface b{
public function bar();
}
//继承接口
interface c extends a,b{
public function baz();
}
//实现接口
class d implements c{
public function foo(){

}

public function bar(){

}
public function baz(){

}
}

interface a{
const b="hello";
}
  

抽象类
php5支持抽象类和抽象方法。抽象类不能直接被实例化,必须先继承该抽象类,然后再实例化子类,任何一个类,如果他里面至少有一个方法是被声明为抽象的,那这个类就必须被声明为抽象的,如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现
继承一个抽象类的时候,子类必须实现抽象类中的所有的抽象方法,另外,这些方法的可见性必须和抽象类中一样(或更轻松),如果抽象类中的某个抽象方法被声明为protected,那么子类中实现的方法应该声明为protected或者public

例子:

abstract class AbstractClass{
//抽象方法
abstract protected function getValue();
abstract protected function prefieValue($p);

//普通方法(非抽象方法)
public function printOut(){
print $this->getValue();
}
}

class ConcreteClass1 extends AbstractClass{
protected function getValue(){
return "ConcreteClass1";
}

public function prefieValue($p){
return "{$p}concreteclass1";
}
}

class ConcreteClass2 extends AbstractClass{
protected function getValue(){
return "ConcreteClass2";
}

public function prefieValue($p){
return "{$p}concreteclass2";
}
}

$class1=new ConcreteClass1();
$class1->printOut();
echo $class1->prefieValue(‘FOO_‘);
/*
  

打印结果:ConcreteClass1

FOO_concreteclass1

2. 调用静态方法的抽象类仍然可行的 类常量不可以的

abstract class Foo
{ const a="hello";
static function bar()
{
echo "test\n";
}
}
Foo::a;//没有输出
Foo::bar();//test
----------------------------
$original = array(‘key‘=>‘value‘, ‘key2‘ =>‘value2‘);
$json = json_encode($original);
$restored =j son_decode($json);

json与javascript
首先要先下载json.js
function showJsonData(){
original = new Array(0,1,2,3);
json = original.toJSONString();
...
}
json.parseJSON()[0]
suggest.html:
<html>
<head>
<script src="json.js" type="text/javascript"></script>
<script type="text/javascript">
var XHR;

function getXHR(){
var req;
if(window.XMLHttpRequest){
req = new XMLHTTPRequest();
}else{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
return req;
}
function suggest(){
if(xhr && xhr.readState !=0){
xhr.abort();
}
xhr = getXHR();

xhr.open("POST","http://example.com/suggest.php",true);
}

</script>

-------------------------------
thinkphp
如果你改变了项目目录(例如把Application更改为Apps),只需要在入口文件更改APP_PATH常量定义即可:
define(‘APP_PATH‘,‘./Apps/‘);
require ‘./ThinkPHP/ThinkPHP.php‘;
更新或者环境改变后遇到问题首要问题是清空Runtime目录;

时间: 2024-10-12 14:15:26

1105PHP笔记001的相关文章

[C++11笔记001]修改通用库中的XDynamicArray,使它可以支持C++11的初始化列表和for循环

今天,有空翻了一下<C++Primer plus(第六版)>,看到里面有介绍新的for循环和初始化列表,但是我实现的动态数组XDynamicArray不支持这些新特性,没办法,只好进行改造了. 首先是for循环,如下面的样式 for(auto e:stList) { cout<<e<<endl; } 是于就各种google,和查找C++11的array的源代码,总结:就是提供一个标准的iterator和begin,end这两个方法,就可以了. 是于定义了一个iterat

spring学习笔记001

转载自:http://www.cnblogs.com/zplogo/p/5029918.html SpringMVC学习笔记001 情景:SpringMVC向后台控制层发送请求,特定方法处理该请求(获取传过来的数据,响应请求,把一些简单数据放入request即Model对象中) 在web.xml中加入SpringMVC的DispatcherServlet核心控制器,指明拦截哪些请求. 在WEB-INF文件夹下建立SpringMVC的XML配置文件,component-scan指明扫描那个包下的控

ObjectARX2010 学习笔记001:在新数据库中创建直线并将此数据库保存成DWG文件

static void swtArxProject5createLine(void) { // Add your code for command swtArxProject5.createLine here //创建新的CAD数据库 AcDbDatabase *pDb=new AcDbDatabase(); //定义块表指针 AcDbBlockTable *pBlkTbl; //获取块表 pDb->getSymbolTable(pBlkTbl,AcDb::kForRead); //定义块表记录

算法面试课程笔记001 算法面试到底是什么鬼

算法面试课程笔记001算法面试到底是什么鬼 =============================================================================== 本文地址 : =============================================================================== 算法面试是什么? 让大家在面对面试中的算法问题时,有一个合理的思考路径: ·不代表能够"正确"回答每一个算法问题

Web前端学习笔记(001)

....编号    ........类别    ............条目  ................明细....................时间 一.Web前端学习笔记                                    2016年6月15日10:38:53    /****************************************************************begin******************************

Android学习笔记001

Android学习笔记,从今天开始正式启动.作为一个.NET的传统开发人员,自学Android开发,其中的艰辛只有我自己才知道喽.先不说Android开发环境的配置,到现在第一个空白项目的创建碰到了诸多问题.今天的问题先贴出来,待我慢慢解决吧. 好不容易debug了第一个项目,就发现控制台不停的在显示各种配置,然后模拟器一直创建个不停,原因到现在未知,部分日志如下: [2015-08-13 22:32:09 - Emulator] WARNING: userdata image already

关于直播学习笔记-001

基础知识: http://www.cnblogs.com/haibindev/archive/2012/04/16/2450989.html http://www.epiphan.cn/bencandy.php?fid=174&id=2554 http://www.cuplayer.com/player/PlayerCode/ Red5: http://www.cnblogs.com/jacktang/p/3409011.html http://www.ibm.com/developerwork

Linux学习笔记001——win下安装Linux虚拟机

我研二之前算是一个纯粹的计算机小白,因为某些原因开始接触了计算机方面的知识. Linux系统也就是前几个月才听说,因某些需求需要在Linux环境下运行.纯的Linux系统不太现实, 所以在他人帮助和自己的摸索下学会了安装虚拟机VMware.至于用哪个版本的系统, 可以选择ubantu也可以选择centos,用哪个版本就下哪个版本的镜像文件,你也可以两个都安装 第一步:安装前的准备工作(百度下一个VMware虚拟机软件和一个镜像文件)      第二步:安装VMware软件,和安装普通软件一样.安

python笔记001——条件和循环

if循环:两种选择 例1: 1 a=42 2 if a<=10: 3 print('the number less than 10') 4 else: 5 print('thank you!') 例2: while循环:重复某个功能多次 例1 1 greetings=1 2 while greetings<=3: #这里记住了是<=而不是<-,不要和R混淆了 3 print('hello!'*greetings) 4 greetings=greetings+1 [[email pr