如何对SP类进行扩展

#1 redguan

SP提示两个公共类。SPMODEL SPCONTROLLER

如何实现对这两个类的标准扩充?

例如一些获取基本数据(获取IP,获取客户端信息),已有现成函数如何正确的扩展?

2010-02-23 11:43:33

#2 redguan

目前可行的有两种方法。

第一种是直接将类或函数写入SP的核心文件。

第二种是在相应目录建立一个新文件。并且通过

$BC = spClass("BaseClass");

可能还有其它方法。希望得到一个正确的,标准的方法。

2010-02-23 12:05:01

#3 php

我是用的第一种方法,直接把函数写在spFunctions.php末尾,这样可以直接使用

2010-02-23 13:28:16

#4 jake

MVC的一个要素就是可以对基类进行继承,用继承的方式扩展基类的功能。

比如说http://speedphp.com/bbs/thread-142-1-1.html 这个例子里面,就扩展了用户model和留言model的基类spmodel,使得它们都有了新的功能。
而spcontroller可以说是语言结构,可以最好不要对spcontroller进行扩展,spcontroller更适合归总的逻辑。

2010-02-23 13:41:10

#5 redguan

这个事情感觉变复杂了,主要是对SP的结构还不是太了解。
总结一下:

一、
增加一个基础类 spBaseClass
$spConfig = 'auto_load_model' => array('spPager','spVerifier','spCache','spLinker','spBaseClass'), // 模型自动加载的扩展类名


但这样要将类代码写入 speedphp.php 这个核心文件。这样就没有OOP的优势了。以后升级也很麻烦。

========================
二、
在model 目录建立一个 文件,并且通过 spclass("类名"); 调用,但是类名内如果又有变量需要传入,那么书写代码就比较麻烦也比较累缀,不利于阅读。
========================
三、写一个公共类文件(或多个)

class XXX extends spModel 这样的形式继承。但是PHP不如JAVA,可以多种继承。(或者PHP6会出,这个不清楚了)

========================
最终目的,我希望的流种是这样:

程序加载=》SP控制类(暂称呼为SP1)或 SP模型类(SP2)、或 SP视图类(SP3)

程序加载=》SP基础扩展类1(P1)或|和(P2)

程序加载=》继承SP1 或 SP2 或 SP3 的子类。


1、不需要改SP版本中的任何文件。

2、增加一个或多个同级的底层类,而非继承原有两个基础类。

2010-02-24 10:42:32

#6 redguan

无法编辑,对上面再补充一点。

为什么我需要新增加一个同级基础类,而不是继承SPMODEL类呢?
因为:

1、我需要一个获取客户端IP的函数。方法是
class XXX extends spModel{
public function getip(){

}
}
这样是可以实现的。如果多个页面需要获取客户端IP。那么我就要在每个相应文件都增加getip 这个函数。
这种方法显示行不通。

但是PHP又没有类似的
class XXX extends spModel, spBaseClass, spPlusClass {
的语句。

2010-02-24 10:55:52

#7 jake

没有那么复杂,其实就在model目录建个top.php,class top extends spModel{}
然后其他的model继承类都是 class xxx extends top{}就好

有什么要全局用的就写到top类里面吧

2010-02-24 12:33:06

#8 redguan

看来很多代码要重写了。包括SP的核心代码。

因为我想用SP做一个复杂的应用群

/
/speedphp
/templates
/temp
/cache
/app1(info) => info.xxx.com
/app2(shop)=> shop.xxx.com
/app3(aticle)=>article.xxx.com

2010-02-24 17:30:57