2010-04-19 59 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

相關問題