如何定义一个变量,应用于所有的动作?

#1 kanchaoyang

有几个问题,一直迷惑着,说明如下:

第一个问题:

$id=$GET[id];


class file extends spController
{
function index()
{ $abc=$id; }

function filewrite()
{ $edf=$id;  }

function file_v()
{$hij=$sid; }

}
?>  
上面的例子中,显然$abc,$edf,$hij 并不能取得$id的值,那么变量$id 如何处理,才能应用与本控制器的所有动作呢?我通常用 $_SESSION处理,使这个变量全局有效,总感觉不对,大家帮帮忙,曾经试过gobal 好像也不起作用!


第二个问题:
我的目录结构如下:
根目录下有如下的文件夹:admin  controller  model  speedphp tmp tpl  
在admin(后台管理)目录文件夹里有:controller model tmp tpl

这两个公用一个speedphp


我的问题是,如果是这两个目录共用一个model?,还是必须要分开,各用各的model呢?


第三个问题:

情况如同问题二,在admin 内的模板中,调用的是 admin/目录下的controller/内的main控制器的index动作,那么怎么样调用根目录下的controller//内的控制器main的index动作呢?


感谢各位!

2010-06-06 07:15:23

#2 jake

一、全局变量Global的用法可以参考PHP手册
http://speedphp.com/doc/php/i/language.variables.scope.html

如果你希望能在整个控制器内使用,可以是在构造函数内定义。
class file extends spController
{
function __construct(){
        $this->id = $_GET['id'];
}
function index()
{ echo $this->id; }


}
?>  

另外提一些建议,希望楼主不要见怪:楼主的代码写得很不好(如果上面的代码是真的话),关键字Global,$_GET都错了,还有类似file之类的近似于关键字的词语,一般不会用来做类名函数名或变量名的。其他的变量定义也是abcd的。建议楼主要多看看别的开源PHP系统的源代码,比较出名的那些类似discuz之类的。

二、两套应用程序(根目录和admin目录)可以共用一套model,当然前提是这一套model两个应用程序都能用。配置一下其中一个应用程序的
'model_path' => APP_PATH.'/model', // 用户模型程序的路径定义
为另外一个应用程序的model地址即可。

三、只能直接写地址,spUrl生成的“同一应用程序”的URL地址,而admin目录是另一个应用程序。比如说你的应用程序和163.com也是两个应用程序,那么你要链接到163.com,也只有直接写http://163.com

2010-06-06 10:09:13

#3 kanchaoyang

感谢老大的提醒和建议,又明白了一些,看来路还很长,要学的还很多啊!谢谢!

2010-06-06 17:46:04