请选择 进入手机版 | 继续访问电脑版

SpeedPHP框架

 找回密码
 注册成为新用户

QQ登录

只需一步,快速开始

查看: 7104|回复: 1

[开发指南] spClass函数(类实例化)

[复制链接]
发表于 2012-8-5 11:08:54 | 显示全部楼层 |阅读模式
在基于sp框架的程序开发中,spClass可以算得上是开发者最常使用到的核心函数了,甚至还要比dump调试程序用地更多。spClass——sp框架类实例化程序,可以说在任何sp程序中都能见到它的身影。

spClass的作用和PHP本身的new关键字作用相似,都是进行将类实例化成对象的操作,不过spClass比new要更强大,而且也有着很多非常实用的特性。接下来我们来介绍一下spClass的使用。

用法:spClass($class_name, $args = null, $dir = null)
参数:
  • $class_name,需要实例化的类名称,同时也可以是一个文件名称与类名相同的文件名。
  • $args,类实例化时的参数。
  • $dir,如果限制该类的文件是在某个目录,$dir将取值为该目录。如果$dir没有设置,则spClass将使用import来自动搜索相关路径以载入类定义文件。


使用spClass将为我们带来以下的多个好处:

  • spClass在实例化前,将检查该类是否已经实例化,如已经实例化,将直接返回该实例化后的对象句柄,以免增加不必要的对象资源开销。
  • spClass可以设置载入类文件的路径,我们可直接指定载入路径,spClass将一次自动完成载入文件及实例化等相关操作。
  • spClass使用了import方式自动搜索类定义文件,使得在很多时候,我们只要直接spClass(类名)就可以类实例化了。
  • spClass使用了更友好的spError错误提示。


这里我们介绍一个关于spClass的更简便的用法。

比如在留言本中我们调用留言模型类guestbook来进行findAll的操作,代码:
  1. <?php
  2. class main extends spController
  3. {
  4.   ...
  5.     function guestbooks(){
  6.         $gb = spClass('guestbook'); // 初始化类
  7.         $result = $gb->findAll(); // 执行findAll,获得返回结果
  8.         $this->gblist = $result; // 将结果赋值给模板中的gblist变量
  9.         $this->display('main_guestbooks.html'); // 输出模板
  10.     }
  11.   ...
  12. }               
复制代码
但是我们的spClass可以简化上面的操作:
  1. <?php
  2. class main extends spController
  3. {
  4.   ...
  5.     function guestbooks(){
  6.         $this->gblist = spClass('guestbook')->findAll(); // spClass一次完成了对象初始化及查找操作,同时将结果赋值给模板中的gblist变量
  7.         $this->display('main_guestbooks.html'); // 输出模板
  8.     }
  9.   ...
  10. }               
复制代码
如果加上自动模板输出,那么我们的代码可以更简捷了:
  1. <?php
  2. class main extends spController
  3. {
  4.   ...
  5.     function guestbooks(){
  6.         $this->gblist = spClass('guestbook')->findAll();
  7.     } // 视图类将自动输出main_guestbooks.html模板
  8.   ...
  9. }
复制代码
 楼主| 发表于 2015-2-27 17:38:06 | 显示全部楼层
类初始化时传入的参数,具体方法是:

spClass("类名", array("参数1", "参数2"))

参数不管多少个,都必须放到数组里面。
您需要登录后才可以回帖 登录 | 注册成为新用户

本版积分规则

手机浏览|简版|中文PHP框架|开源协议|SpeedPHP.com ( 粤ICP备08008671号

GMT+8, 2020-4-4 10:02

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表