请求帮助:关于源码的一点不解

2016-07-07 16:47 来源:www.chinab4c.com 作者:ecshop专家

在程序的eccore/ecmall.php文件里有这样一段代码:
  1. <?php

  2. /**
  3. * ECMall框架核心文件,包含最基础的类与函数
  4. * Streamlining comes from Sparrow PHP @ Garbin
  5. *
  6. * @author Garbin
  7. */

  8. /*---------------------以下是系统常量-----------------------*/
  9. /* 记录程序启动时间 */
  10. define('START_TIME', ecm_microtime());

  11. /* 判断请求方式 */
  12. define('IS_POST', (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST'));

  13. /* 判断请求方式 */
  14. define('IN_ECM', true);

  15. /* 定义PHP_SELF常量 */
  16. define('PHP_SELF',htmlentities(isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']));

  17. /* 当前ECMall程序版本 */
  18. define('VERSION', '2.0 final');

  19. /* 当前ECMall程序Release */
  20. define('RELEASE', '20090821');

  21. /*---------------------以下是PHP在不同版本,不同服务器上的兼容处理-----------------------*/

  22. /* 在部分IIS上会没有REQUEST_URI变量 */
  23. $query_string = isset($_SERVER['argv'][0]) ? $_SERVER['argv'][0] : $_SERVER['QUERY_STRING'];
  24. if (!isset($_SERVER['REQUEST_URI']))
  25. {
  26. $_SERVER['REQUEST_URI'] = PHP_SELF . '?' . $query_string;
  27. }
  28. else
  29. {
  30. if (strpos($_SERVER['REQUEST_URI'], '?') === false && $query_string)
  31. {
  32. $_SERVER['REQUEST_URI'] .= '?' . $query_string;
  33. }
  34. }

  35. /*---------------------以下是系统底层基础类及工具-----------------------*/
  36. class ECMall
  37. {
  38. /* 启动 */
  39. function startup($config = array())
  40. {
  41. /* 加载初始化文件 */
  42. require(ROOT_PATH . '/eccore/controller/app.base.php');//基础控制器类
  43. require(ROOT_PATH . '/eccore/model/model.base.php');//模型基础类

  44. if (!empty($config['external_libs']))
  45. {
  46. foreach ($config['external_libs'] as $lib)
  47. {
  48. require($lib);
  49. }
  50. }
  51. /* 数据过滤 */
  52. if (!get_magic_quotes_gpc())
  53. {
  54. $_GET= addslashes_deep($_GET);
  55. $_POST= addslashes_deep($_POST);
  56. $_COOKIE= addslashes_deep($_COOKIE);
  57. }

  58. /* 请求转发 */
  59. $default_app = $config['default_app'] ? $config['default_app'] : 'default';
  60. $default_act = $config['default_act'] ? $config['default_act'] : 'index';

  61. $app = isset($_REQUEST['app']) ? trim($_REQUEST['app']) : $default_app;
  62. $act = isset($_REQUEST['act']) ? trim($_REQUEST['act']) : $default_act;
  63. $app_file = $config['app_root'] . "/{$app}.app.php";
  64. if (!is_file($app_file))
  65. {
  66. exit('Missing controller');
  67. }

  68. require($app_file);
  69. define('APP', $app);
  70. define('ACT', $act);
  71. $app_class_name = ucfirst($app) . 'App';

  72. /* 实例化控制器 */
  73. $app= new $app_class_name();
  74. c($app);
  75. $app->do_action($act);//转发至对应的Action
  76. $app->destruct();
  77. }
  78. }

  79. /*中间省略了部分代码,就是两个类,一个conf一个language*/

  80. /**
  81. * 获取视图链接
  82. *
  83. * @author Garbin
  84. * @paramstring $engine
  85. * @return object
  86. */
  87. function &v($is_new = false, $engine = 'default')
  88. {
  89. include_once(ROOT_PATH . '/eccore/view/template.php');
  90. if ($is_new)
  91. {
  92. return new ecsTemplate();
  93. }
  94. else
  95. {
  96. static $v = null;
  97. if ($v === null)
  98. {
  99. switch ($engine)
  100. {
  101. case 'default':
  102. $v = new ecsTemplate();
  103. break;
  104. }
  105. }

  106. return $v;
  107. }
  108. }

  109. /**
  110. *获取一个模型
  111. *
  112. *@author Garbin
  113. *@paramstring $model_name
  114. *@paramarray$params
  115. *@parambook$is_new
  116. *@return object
  117. */
  118. function &m($model_name, $params = array(), $is_new = false)
  119. {
  120. static $models = array();
  121. $model_hash = md5($model_name . var_export($params, true));
  122. if ($is_new || !isset($models[$model_hash]))
  123. {
  124. $model_file = ROOT_PATH . '/includes/models/' . $model_name . '.model.php';
  125. if (!is_file($model_file))
  126. {
  127. /* 不存在该文件,则无法获取模型 */
  128. return false;
  129. }
  130. include_once($model_file);
  131. $model_name = ucfirst($model_name) . 'Model';
  132. if ($is_new)
  133. {
  134. return new $model_name($params, db());
  135. }
  136. $models[$model_hash] = new $model_name($params, db());
  137. }

  138. return $models[$model_hash];
  139. }

  140. /**
  141. * 获取一个业务模型
  142. *
  143. * @param string $model_name
  144. * @param array $params
  145. * @param bool $is_new
  146. * @return object
  147. */
  148. function &bm($model_name, $params = array(), $is_new = false)
  149. {
  150. static $models = array();
  151. $model_hash = md5($model_name . var_export($params, true));
  152. if ($is_new || !isset($models[$model_hash]))
  153. {
  154. $model_file = ROOT_PATH . '/includes/models/' . $model_name . '.model.php';
  155. if (!is_file($model_file))
  156. {
  157. /* 不存在该文件,则无法获取模型 */
  158. return false;
  159. }
  160. include_once($model_file);
  161. $model_name = ucfirst($model_name) . 'BModel';
  162. if ($is_new)
  163. {
  164. return new $model_name($params, db());
  165. }
  166. $models[$model_hash] = new $model_name($params, db());
  167. }

  168. return $models[$model_hash];
  169. }

  170. /**
  171. * 获取当前控制器实例
  172. *
  173. * @author Garbin
  174. * @return void
  175. */
  176. function c(&$app)
  177. {
  178. $GLOBALS['ECMALL_APP'] =& $app;
  179. }

  180. /**
  181. * 获取当前控制器
  182. *
  183. * @author Garbin
  184. * @return Object
  185. */
  186. function &cc()
  187. {
  188. return $GLOBALS['ECMALL_APP'];
  189. }
复制代码
倒数回去的两个函数如下:
  1. /**
  2. * 获取当前控制器实例
  3. *
  4. * @author Garbin
  5. * @return void
  6. */
  7. function c(&$app)
  8. {
  9. $GLOBALS['ECMALL_APP'] =& $app;
  10. }

  11. /**
  12. * 获取当前控制器
  13. *
  14. * @author Garbin
  15. * @return Object
  16. */
  17. function &cc()
  18. {
  19. return $GLOBALS['ECMALL_APP'];
  20. }

  21. /**
  22. * 导入一个类
  23. *
  24. * @author Garbin
  25. * @return void
  26. */
复制代码
在includes/plugin.base.php里,倒数两个函数如下:
  1. function assign($k, $v)
  2. {
  3. $app =& c();
  4. $app->assign($k, $v);
  5. }
  6. function display($f)
  7. {
  8. $app =& c();
  9. $app->display($f);
  10. }
复制代码
我现在搞不明白的是
  1. $app =& c();
复制代码
如何解释?我对引用知之甚少,望大虾赐教!不甚感激!

回答:
插件基类文件。$app = & c();获取当前的控制器。

Missing argument 1 for c(), called in /includes/plugin.base.php on line 23 and defined
Error File: /eccore/ecmall.php at 375 line.

请查阅PHP手册-引用

看引用你也少个参数啊,定义是有参数,你又没给默认值,PLUGIN开发,调用$this->assign()就提示
Missing argument 1 for c(), called in /includes/plugin.base.php on line 23 and defined
Error File: /eccore/ecmall.php at 375 line.

可能开发PLUGIN的人少,没发现??


呵呵 我也是来学习的。。。






















Signature------------------------------------------------------
Where there is great love, there are always miracles.
nike free 3.0
nike free 5.0
nike lunarglide 3

不回不行了,因为楼猪太有才了。










蘑菇街首页

水平很高啊,值得学习










给大家推荐个网站 无广告小说网 book.feichangzhai.net你懂的

好东西啊,谢谢楼主啊!!

请楼主继续发好贴,支持你

很好很强大










signature--------------------------------------------------------------------------------
adidas jeremy scott wings
jeremy scott wings 2.0
jeremy scott wings gid
jeremy scott teddy bear
Adidas ObyO Jeremy Scott
Jeremy Scott Wings 2NE1

说的不错!










满足中小企业的需求,是XToolsCRM设计和开发团队的主要目标。“提供中小企业适用、好用的客户关系管理系统”XToolsCRM是的宗旨。

支持一下吧,确实是不错的贴子。










佛山光盘制作 www.dvd0757.com

好,值得细看,佩服










http://www.guizhoujiaxiao.com/219.htm