PHP定义包含类的变量

| 我正在尝试定义一个包含应用程序功能的类的“ 0”个全局实例。 基本上,我正在尝试为我的库创建一个名称空间,因此,我试图使用一个类来保存我的所有函数/方法。 我不想在所有文件的开头都包含“ 1”,因为这很丑陋。 另外,我不必在任何地方都引用变量
$GLOBALS[\'myvar\']
。 我个人认为这是对php的真正监督。 看来我无法定义
$myFunctionsGlobal
等超级全局变量 而且我无法像
myvar=$classInstance
这样在php中定义变量(实际上是常量)。 命名空间 如果应该使用命名空间来解决此问题,为什么不更广泛地使用它们呢? 例如,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似乎很特殊,可以让您使用具有相同名称的
namespaces
functions
classes
。为了简化起见,我试图将所有功能归为一个中央变量,但仍具有
__invokable
的功能。实际上,具有相同名称的类和函数将提供此功能。
<?

class R{
    static function static_method(){
        ;
    }
    function method(){
        ;
    }
}
function R(){;}

R();
R::static_method();

$instance = new R();
$instance->method();
在php5.3中,您可以通过定义与名称空间同名的函数来模拟方法的可调用常量。 namespace.php
<? namespace Z;

function init($arg=\'\'){
    echo $arg;
}

function method(){
    echo \'method\';
}

function method(){
    echo \'method2\';
}
othefile.php
include(\'namespace.php\');

function Z($a=null,$b=null){
    return Z\\init($a,$b);
}

Z(\'test\');
Z\\method();
Z\\method2();
    
已邀请:
        您可以使用服务容器。 您可以在此处找到一个示例:我的User类的唯一实例应使用哪种模式?并加深如果Singletons不好,那么服务容器为什么好? 同样,如果您需要像您所要求的那样,命名空间不能为您的助手对象提供一个实例,那么它也无法为您提供帮助。 附录 我建议您使用服务容器仍可以使用
__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
包括您的课程后,即可访问它 您不需要创建对象,因为它是一个静态变量,只需要包含类即可     

要回复问题请先登录注册