PHP定义包含类的变量
我试图定义一个包含应用程序函数的类的PHP定义包含类的变量,php,variables,global,Php,Variables,Global,我试图定义一个包含应用程序函数的类的\u invoke可调用的全局实例。 基本上,我试图为我的库创建一个名称空间,因此我试图使用一个类来保存我的所有函数/方法 我不想在所有文件的顶部都包含global$class\u实例,因为这很难看 此外,我不必到处引用变量$GLOBALS['myvar'] 我个人认为这在php中是一个真正的疏忽 似乎我无法定义超全局变量,如$myFunctionsGlobal 我不能在php中定义变量(实际上是常量),比如myvar=$classInstance 名称空间
\u invoke
可调用的全局实例。
基本上,我试图为我的库创建一个名称空间,因此我试图使用一个类来保存我的所有函数/方法
我不想在所有文件的顶部都包含global$class\u实例
,因为这很难看
此外,我不必到处引用变量$GLOBALS['myvar']
我个人认为这在php中是一个真正的疏忽
似乎我无法定义超全局变量,如$myFunctionsGlobal
我不能在php中定义变量(实际上是常量),比如myvar=$classInstance
名称空间
如果名称空间应该解决这个问题,为什么它们没有得到更广泛的应用
例如,Kohana不使用名称空间以及许多其他php库
我要找的一个:
class _namespace{
public $_function;
function __invoke($arg){
// Function body
echo $arg;
}
function method(){
;
}
}
$N = new _namespace;
$N('someValue');
$N->method();
function myFunc(){
// I don't want global $N;
// I don't want $N = $_GLOBALS['N'];
// I don't want $N = get_instance();
$N('some other value');
}
解决方案:
在大多数其他语言(如c和js)中,每个变量名只能有一个对象/函数。PHP似乎很特别,它允许您使用相同名称的名称空间
、函数
和类
。为了简单起见,我试图将我的所有函数分组在一个中心变量下,并且仍然具有可调用的功能。事实上,一个名为同一事物的类和函数可以提供此功能
<?
class R{
static function static_method(){
;
}
function method(){
;
}
}
function R(){;}
R();
R::static_method();
$instance = new R();
$instance->method();
您可以使用服务容器 你可以在这里找到一个例子:和深化 此外,如果您需要像您所要求的那样为助手对象提供一个实例,那么名称空间也不能帮助您 补遗 对于服务容器,我建议您仍然可以使用
\uu invoke
$obj = app('CallableClass');
$obj(5);
这是我给你的新答案,它有效
class _bidon {
static function __invoke($arg){
// Function body
echo $arg;
}
}
$b = new _bidon;
$b('eee');
function myFunc(){
// I don't want global $N;
// I don't want $N = $_GLOBALS['N'];
// I don't want $N = get_instance();
_bidon::__invoke('some other value');
}
myFunc();
但是函数将特定于类而不是对象
------前任职务:
您好,我不太清楚,但如果您创建了一个类,请执行以下操作:
public static $myFunctionsGlobal;
如果你想在课堂之外使用它,你可以:
myclassname::$myFunctionsGlobal
一旦你把你的班级包括进来,它就可以访问了
你不需要创建一个对象,因为它是一个静态变量,你只需要包含这个类你的问题是什么?只是名称空间吗?名称空间在PHP中并没有广泛使用,因为(a)它们是最近才引入的,(b)它们非常丑陋。(无论如何,我不太确定它们如何适合您描述的场景。)您能展示一些您实际使用的代码吗,或者在开始编写代码之前这是一个理论问题吗?您需要调用什么?你有一个类的行为就像一个单一的函数?PHP支持全局函数(可能会有一个静态变量到您的对象实例),我真的很难理解您的目标。请添加一些代码。我只是想减少我的全局变量,并为我的全局变量提供最大的通用性。例如,我还可以向上面的类添加
\uu集
,\uu获取
,\uu调用
,等等,以添加其他潜在功能。我只是试图防止全局变量冲突,同时保持全局变量\uu调用
的功能。通过使用方法创建类实例$classInstacce
,我可以成功避免全局冲突。类实例也可以是可调用的invokable
@Lime:您应该在问题中添加uu invoke部分。我认为这很重要。@hakre:他在。。。我讨厌有人在顶部加上这个,是的,很容易忽略。。。不是很有建设性。@lime:我已经添加了关于您可调用问题的信息
public static $myFunctionsGlobal;
myclassname::$myFunctionsGlobal