在php函数中使对象可用,而不传递它们或使它们全局化

时间:2010-04-19 03:48:12

标签: php variables templating

这个要求只是为了简化开发人员和漂亮的代码。我正在构建一个模板系统,我真的只想在所有函数中使用一个对象变量。这是一些代码:

Librarian.php:

$class = "slideshow";
$function = "basic";
$args = array(...);
$librarian = $this; // I WOULD LIKE THIS TO BE PRESENT IN CALLED FUNCTION

...

return call_user_func($class.'::'.$function, $args);

...

Slideshow.php:

public static function basic($args) {
    echo $librarian; // "Librarian Object"
}

谢谢! 马特穆勒

2 个答案:

答案 0 :(得分:2)

您可以使用以下功能:

public static function basic($args) {
    echo librarian();
}

// some other file
function librarian()
{
    global $librarian;
    // does some stuff
}

这样您就不必不断地为每个函数添加全局语句。

这是你的意思吗?

答案 1 :(得分:1)

我猜你可以使用单身,但这有点属于global类别。

class Librarian
{
    static $instance = null;

    function __toString()
    {
        return 'Librarian Object';
    }

    function foo()
    {
        return 'bar';
    }

    function singleton()
    {
        if (is_null(self::$instance))
        {
            self::$instance = new Librarian();
        }

        return self::$instance;
    }
}

function basic()
{
    echo Librarian::singleton(); // Librarian Object
    echo Librarian::singleton()->foo(); // bar
}

您也可以在课堂外使用单身人士:

class Librarian
{
    function __toString()
    {
        return 'Librarian Object';
    }

    function foo()
    {
        return 'bar';
    }
}

function singleton()
{
    static $instance = null;

    if (is_null($instance))
    {
        $instance = new Librarian();
    }

    return $instance;
}

function basic()
{
    echo singleton(); // Librarian Object
    echo singleton()->foo(); // bar
}

你想要的是不可能的,至少我没有看到任何简单优雅的方式。