PHP:在同一类中调用内部(函数)方法

PHP:在同一类中调用内部(函数)方法,php,class,static-methods,Php,Class,Static Methods,我不想在每个方法上都有多行相同的代码,而是想设置一个(引导/初始化)方法来定义公共值等等。然后,在需要时调用该方法 最初,我有这样的想法: <?php class boot { private static $root = $_SERVER['DOCUMENT_ROOT'] . '/'; public static function load() { return self::$root; } } $test = boot::load(); e

我不想在每个方法上都有多行相同的代码,而是想设置一个(引导/初始化)方法来定义公共值等等。然后,在需要时调用该方法

最初,我有这样的想法:

<?php
class boot {
    private static $root = $_SERVER['DOCUMENT_ROOT'] . '/';


    public static function load() {
        return self::$root;
    }
}

$test = boot::load();
echo $test;
?>

但是我会得到一个类似这样的错误:Parse error:syntax error,在…

所以,我把它改成:

<?php /* Class Bootstrap (Boot for short) */
class boot {
    private static $base = null;
    private static $root = null;


    private static function boot(){
        self::$base = $_SERVER['DOCUMENT_ROOT'] . '/';
    }


    public static function load() {
        self::boot();
        return self::$base;
    }
}

$test = boot::load();
echo $test;
?>

然后我发现:致命错误:构造函数boot::boot()不能在中是静态的…

因此,我求助于:

<?php
class boot {
    private static $base = null;
    private static $root = null;


    private function boot(){
        $this->base = $_SERVER['DOCUMENT_ROOT'] . '/';
    }


    public static function load() {
        $this->boot();
        return self::$base;
    }
}

$test = boot::load();
echo $test;
?>

但我仍然得到一个错误,致命错误:在不在对象上下文中时使用$this…
我尝试了不同的方法,但我没有主意。

在静态上下文中不能使用$this

要总结以上答案,您必须使用$this 访问属于当前对象的成员(非静态),但使用self::访问类的静态成员


您可以将所有函数设置为静态,并使用self::而不是$this->。

您不能在静态上下文中使用$this

要总结以上答案,您必须使用$this 访问属于当前对象的成员(非静态),但使用self::访问类的静态成员

您可以将所有函数设置为静态,并使用self::而不是$this->。

尝试以下方法

class boot {
    private static $base = null;
    private static $root = null;

    public static function load() {
        self::$base = $_SERVER['DOCUMENT_ROOT'] . '/';
        return self::$base;
    }
}

$test = boot::load();
echo $test;
试试下面的方法

class boot {
    private static $base = null;
    private static $root = null;

    public static function load() {
        self::$base = $_SERVER['DOCUMENT_ROOT'] . '/';
        return self::$base;
    }
}

$test = boot::load();
echo $test;


self::$base
self::ini()
@马克·贝克,这两种方法都不起作用。你能试着回答吗?我真的不明白。如果您使用的是全静态类,只需初始化静态变量一次。如果您计划实例化类,请将初始化放在它们所属的位置,即构造函数中。还是我遗漏了什么?@kuroineko黒い猫, $底座使用了好几次。我还调用了boot:function()之类的函数。静态函数不能调用构造。此外,在这个例子中,您只看到一行,但我有更多。反复添加同一行代码是无效的
self:$base
self::ini()。你能试着回答吗?我真的不明白。如果您使用的是全静态类,只需初始化静态变量一次。如果您计划实例化类,请将初始化放在它们所属的位置,即构造函数中。还是我遗漏了什么?@kuroineko黒い猫, $底座使用了好几次。我还调用了boot:function()之类的函数。静态函数不能调用构造。此外,在这个例子中,您只看到一行,但我有更多。一遍又一遍地添加同一行代码是无效的。你能解释一下吗?我不明白,我已经更新了我的答案。我可以问一下为什么要使用静态变量吗?我忘了提到我已经绑定了它。我编辑了这个问题以反映它。你能解释一下吗?我不明白,我已经更新了我的答案。我可以问一下为什么要使用静态变量吗?我忘了提到我已经绑定了它。我编辑了这个问题,以反映它确实有效,。我没有看到的是跳过所有这些障碍的意义。@kuroi,是的,我也看不到这一点。。只是想显示类变量和实例变量之间的差异。我相信奥马尔还得继续读下去。是的,我想他最好:)用不同的函数将load()乘以二十倍。这不是我要找的。我想一次性初始化一些属性。不是每个函数上都有(x20)。再说一次,这只是一行,但我有更多的,肯定会工作,。我没有看到的是跳过所有这些障碍的意义。@kuroi,是的,我也看不到这一点。。只是想显示类变量和实例变量之间的差异。我相信奥马尔还得继续读下去。是的,我想他最好:)用不同的函数将load()乘以二十倍。这不是我要找的。我想一次性初始化一些属性。不是每个函数上都有(x20)。再说一次,这只是一行,但我还有很多