2010-04-19 66 views
1

这个要求仅仅是为了开发者和漂亮代码的简单性。我正在构建一个模板系统,我真的只想把一个对象变量放在所有函数中。下面是一些代码:使对象在php函数中可用而不传递它们或使它们成为全局对象

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

你可以有你使用一个函数:

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

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

这样,你不会有全球的语句不断添加到每个功能。

这是你的意思吗?

+0

非常感谢。我想我会通过它。谢谢! – Matt 2010-04-19 04:26:47

+0

是的,这正是我用我的模板所做的,只需要一个tpl_display(),tpl_set()函数,这样我就不需要每次都包含一个全局对象。 – 2010-04-19 04:27:52

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 
} 

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

+0

谢谢。是的,这根本不算高雅! – Matt 2010-04-19 04:26:01

相关问题