<?php
///////////////////////////////////////////////////////////////////////////////////////////////////////
// 这个文件是 JCAT PHP框架的一部,该项目和此文件 均遵循 GNU 自由软件协议
//
// Copyleft 2008 JeCat.cn(http://team.JeCat.cn)
//
//
// JCAT PHP框架 的正式全名是:Jellicle Cat PHP Framework。
// “Jellicle Cat”出自 Andrew Lloyd Webber的音乐剧《猫》(《Prologue:Jellicle Songs for Jellicle Cats》)。
// JCAT 是一个开源项目,它像音乐剧中的猫一样自由,你可以毫无顾忌地使用JCAT PHP框架。
// JCAT 由中国团队开发维护,是一个国际性的项目。
// 正在使用的这个版本是:0.3.2 / SVN信息:$Id: class.JCAT_Package.php 1250 2009-02-07 04:53:17Z aleechou $
//
//
//
// 相关的链接:
// [主页] http://jcat.JeCat.cn
// [HTTP下载] http://jcat.JeCat.cn/download
// [在线文档] http://jcat.JeCat.cn/document
// [社区] http://jj.jecat.cn/forum-7-1.html
// 不很相关:
// [MP3] http://www.google.cn/search?q=jellicle+songs+for+jellicle+cats+Andrew+Lloyd+Webber
// [VCD/DVD] http://www.google.cn/search?q=CAT+Andrew+Lloyd+Webber+video
//
///////////////////////////////////////////////////////////////////////////////////////////////////////
/*-- Project Introduce --*/
include_once dirname(__FILE__).'/SOAP/interface.JCAT_ISSMI.php' ;
/**
* 包管理类,这是一个静态类
*
* @author alee
* @access public
*/
class JCAT_Package implements JCAT_ISSMI
{
/**
* 导入整个包
*
* @access public
* @param $sPackage string 被导入的包的路径 或 包的ID(JCAT类中的一个常量),
* @param $bForceRefreshCache=fasle bool 强制重建 Classes Path 文件
* @static
* @return void
*/
static public function Import( $sPackage, $bForceRefreshCache=false )
{
// 检查路径
if( !is_dir($sPackage) )
{
throw new JCAT_Exception("Package:'{$sPackage}' does not exists.",JCAT_Exception::MakeExceptionCode(__CLASS__,1)) ;
}
$sPackagePath = realpath($sPackage).'/' ;
// 创建 Classes Path 文件
$sClassesPathFile = $sPackagePath.self::$sClassesPathFilename ;
if( JCAT_ProjectState::Get(JCAT_ProjectState::ALWAYS_RECREATE_CLASSESPATH)
or $bForceRefreshCache
or !is_file($sClassesPathFile) )
{
// 类路径 文件
if( !is_file($sClassesPathFile) )
{
if( $hFile=fopen($sClassesPathFile,'a') )
{
fclose($hFile);
chmod($sClassesPathFile,0666) ;
}
else
{
return false ;
}
}
$arrFileLines = array('<?') ;
// 扫描类
$arrClassesPath = self::ScanClass($sPackagePath) ;
foreach ($arrClassesPath as $arrMapping)
{
$arrFileLines[] = __CLASS__."::RegisterClass('{$arrMapping['class']}',\$sDirectoryBase.'{$arrMapping['file']}') ;" ;
}
$arrFileLines[] = '?>' ;
$sFileContents = implode("\r\n",$arrFileLines) ;
// 写入文件
if( !file_put_contents($sClassesPathFile,$sFileContents) )
{
throw new JCAT_Exception(
JCAT_Language::SentenceEx('请确保拥有权限,无法创建 Classes Path 文件:%s','JCAT',null,$sClassesPathFile)
, __macro_exception_code__
) ;
}
}
// 读取 Classes Path 文件
$sDirectoryBase = $sPackagePath ; // <<--- 在 $sClassesPathFile 文件中用到的变亮
require_once $sClassesPathFile ;
}
/**
* 导入一个类
*
*
* @access public
* @param $sClass string 类名或类文件完整路径
* @param $PathOrPackageID=null string,int 类文件的路径 或 所在包的ID
* @static
* @return void
*/
static public function ImportClass( $sClass, $PathOrPackageID=null )
{
// 类已经导入
if( self::ClassExists($sClass) )
{
return ;
}
// 指定文件
if( is_file($sClass) )
{
require_once ($sClass) ;
return ;
}
// 提供类名
else
{
JCAT_ASSERT::ASSERT_ISTHESE($PathOrPackageID,array('string','int'));
// 参数 $PathOrPackageID 为路径
if( is_string($PathOrPackageID) )
{
$sClassPath =& $PathOrPackageID ;
}
// 参数 $PathOrPackageID 为 包ID
else if( is_int($PathOrPackageID) )
{
$sClassPath = self::GetPackagePath($PathOrPackageID) ;
}
else
{
JCAT_ASSERT::ASSERT_(0,'!?') ;
}
// 在目录中依据 JCAT 命名规则 寻找 class 文件
if(is_dir($sClassPath))
{
$sClassPath = self::FindClassFileByNamingRule($sClass,$sClassPath) ;
if($sClassPath===false)
{
JCAT_ASSERT::ASSERT_(0,"Coundn`t found class {$sClass}`s file and imported it. ",JCAT_Exception::MakeExceptionCode(__CLASS__,2)) ;
}
}
// 载入
require $sClassPath ;
}
}
/**
* 导入一个接口
*
* @access public
* @param $sInterface string 类名或类文件完整路径
* @param $nPackage=null int 类所在的包
* @static
* @return void
*/
static public function ImportInterface( $sInterface, $nPackage=null )
{
// 指定文件
if( is_file($sInterface) )
{
require_once ($sInterface) ;
return ;
}
//
else
{
// 类已经导入
if( self::ClassExists($sInterface,true) )
return ;
// 包 所在目录
$sPackage = self::GetPackagePath($nPackage) ;
// 按照命名规则寻找类文件
$sPath = self::FindClassFileByNamingRule($sInterface,$sPackage,self::$arrInterfaceFilePatterns) ;
if($sPath===false)
throw new JCAT_Exception("Coundn`t found interface {$sInterface}`s file and imported it. ",JCAT_Exception::MakeExceptionCode(__CLASS__,3)) ;
// 载入
require $sPath ;
}
}
/**
* What's this Method ?
*
* @access public
* @param $Methods='*' string,array 被导入的静态方法,可以是 数组(多个方法的名称),字串(指定的方法名称),和'*'(所有的静态方法)
* @param $sClass string 类名
* @param $PackageOrClassFile int,string 类所属包的ID 或 类文件的完整路径
* @return int
*/
static public function ImportStaticMethod( $Methods='*', $sClass, $PackageOrClassFile )
{
// $PackageOrClassFile 包ID
if( is_int($PackageOrClassFile) )
{
$sPackagePath = self::GetPackagePath($PackageOrClassFile) ;
if( empty($sPackagePath) )
throw new JCAT_Exception("无效的 包ID:$nPackage ",JCAT_Exception::MakeExceptionCode(__CLASS__,4)) ;
// 找到类文件
$sClassPath = self::FindClassFileByNamingRule($sClass,$sPackagePath) ;
if( $sClassPath===false )
throw new JCAT_Exception("无法根据 JCAT的文件命名规则找到类:{$sClass} 的文件 ",JCAT_Exception::MakeExceptionCode(__CLASS__,5)) ;
}
// $PackageOrClassFile 类文件的完整路径
else if( is_string($PackageOrClassFile) )
{
if( !is_file($PackageOrClassFile) )
throw new JCAT_Exception("参数\$PackageOrClassFile 必须为 有效的包ID(int) 或 一个存在的类文件(string)。",JCAT_Exception::MakeExceptionCode(__CLASS__,8)) ;
$sClassPath = $PackageOrClassFile ;
}
// $PackageOrClassFile 参数无效
else
throw new JCAT_Exception("参数\$PackageOrClassFile 必须为 有效的包ID(int) 或 一个存在的类文件(string)",JCAT_Exception::MakeExceptionCode(__CLASS__,9)) ;
// 获取 所有的静态方法
if( $Methods==='*' )
{
$Methods = array() ;
$arrAllMethods = get_class_methods($sClass) ;
foreach($arrAllMethods as $sMethod)
{
$aRef = new ReflectionMethod($sClass,$sMethod) ;
if( !$aRef->isStatic() )
continue ;
$Methods[] = $sMethod ;
}
}
// 检查参数类型
if( !is_array($Methods) )
throw new JCAT_Exception("参数 $Methods 非法。",JCAT_Exception::MakeExceptionCode(__CLASS__,6)) ;
// 创建 与方法 同名的全局函数
$nCount = 0 ;
foreach($Methods as $sMethod)
{
JCAT_Global::MakeFunctionAlias($sMethod,array($sClass,$sMethod)) ;
$nCount ++ ;
}
return $nCount ;
}
/**
* 从一个 实例文件
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
[其他类别]PHP开源框架 JCAT 0.3.2.1247_jcat_0.3.2.1247.rar (555个子文件)
aa 0B
aaa 0B
aaa 0B
Makefile.am 356B
Makefile.am_new 356B
ChangedLog.txt.bak 1KB
bb 0B
bbb 0B
interface.c 1KB
callbacks.c 141B
window1_glade.cc 2KB
glades.cc 440B
window1.cc 253B
cc 0B
glades.cc_new 440B
window1.cc_new 253B
ccc 0B
JCAT_UICtrlHtmlMenu.css 700B
JCAT_ViewHtmlLayout.css 457B
JCAT.css 443B
JCAT_UICtrlHtmlPagination.css 0B
d 0B
dd 0B
e 0B
f 0B
g 0B
---.glade 69KB
template.JCAT_ExceptionMessageDialog.glade 17KB
test.glade 14KB
JCAT_MessageGtkDialogPrinter.glade 5KB
template.JCAT_UICtrlGtkFSChooser.glade 2KB
JCAT.gtkrc 306B
interface.h 95B
callbacks.h 22B
h 0B
window1_glade.hh 1KB
window1.hh 430B
window1.hh_new 430B
template.JCAT_ExceptionProcessorHtmlDBView.html 2KB
template.JCAT_UICtrlHtmlPagination.html 1KB
template.JCAT_ExceptionProcessorHtmlView.html 1KB
template.JCAT_ViewHtmlLayoutFrame.html 998B
template.JCAT_WebpageCommon.html 921B
template.JCAT_UICtrlHtmlImage.html 812B
template.JCAT_UICtrlHtmlMenuItem.html 728B
template.JCAT_UICtrlHtmlFile.html 726B
template.JCAT_UICtrlHtmlSText.html 649B
template_a.html 618B
template.JCAT_UICtrlHtmlMText.html 579B
template.JCAT_UICtrlHtmlSelect.html 566B
template.JCAT_ViewHtmlLayoutDecorator.html 482B
template.JCAT_UICtrlItemCheckbox.html 360B
template.JCAT_UICtrlItemRadio.html 340B
template.JCAT_UICtrlItemOption.html 210B
template.JCAT_UICtrlHtmlMenu.html 188B
template.JCAT_UICtrlHtmlRadio.html 134B
template.JCAT_UICtrlHtmlMBox.html 134B
template.JCAT_ViewHtmlLayoutFrame_MissView.html 70B
package.JCAT.js 25KB
package.MVC.js 16KB
class.String.js 12KB
class.Class.js 6KB
class.Language.js 3KB
class.TextBase.js 1KB
class.ViewForm.js 1KB
class.XMLHttp.js 1KB
class.Select.js 1KB
class.LengthVerifier.js 1KB
class.IForm.js 1KB
class.SSMI.js 1KB
class.IForm.js 1KB
class.IContainer.js 1KB
class.IContainer.js 954B
class.RepeatVerifier.js 715B
class.Script.js 714B
class.HtmlLayout.js 609B
class.MText.js 600B
class.SText.js 594B
class.IView.js 469B
class.Frame.js 423B
class.UICtrl.define.js 396B
class.IUICtrl.js 312B
class.IDataVerifier.js 219B
class.View.define.js 213B
class.View.declare.js 136B
class.DataVerifier.js 128B
class.UICtrl.declare.js 116B
class.MVC.js 87B
class.JCAT.js 59B
class.SOAP.js 58B
LICENSE 18KB
cn.JCAT.lpg 33KB
cn.JCAT.JS.lpg 2KB
Files.lst 525B
Files.lst 138B
class.JCAT_Package.php 26KB
class.JCAT_UICtrlGtkTree.php 21KB
class.JCAT_DBDocument.php 20KB
class.JCAT_View.php 19KB
class.JCAT_ASSERT.php 19KB
共 555 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
CrMylive.
- 粉丝: 1w+
- 资源: 4万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功