Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP定义包含类的变量_Php_Variables_Global - Fatal编程技术网

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