PHP:在同一个类中调用内部(Function)方法

时间:2014-01-17 00:06:24

标签: php class static-methods

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

最初,我有这样的事情:

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


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

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

但是我会收到一个错误,例如:解析错误:语法错误,意外的T_VARIABLE ......

所以,我把它改为:

<?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 我尝试了不同的东西,但我没有想法。

2 个答案:

答案 0 :(得分:3)

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

When to use self over $this?

总结上述答案你必须使用$ this  要访问属于当前Object(非静态)的成员,但使用self ::来访问该类的静态成员。

您可以将所有功能设置为静态并使用self ::而不是$ this-&gt;

答案 1 :(得分:1)

尝试以下

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;