2011-01-06 123 views
2

我在複製的課程中發生了某些錯誤。這不是我的課,但失敗的相關位是:爲什麼有人會以這種方式使用ob_start,這有什麼意義?

class foo { 
    function process() { 
    ob_start(array(&$this, 'parseTemplate')); 
    } 

    function parseTemplate(){} 

} 

有誰知道什麼ob_start表達應該做的事?在&$this副本的上下文中調用parse_template方法? PHP版本是5.3.2-1。我懷疑這個班的編碼是5.0-5.2,而且是5.3?或者它可能是別的東西?

+0

好的,我們現在有很多的迴應,說這是一個ob_start回調用法。問題的第二部分是它爲什麼失敗。手冊上有一個很大的警告,請檢查parseTemplate函數是否包含「chdir(dirname($ _ SERVER ['SCRIPT_FILENAME']))」。也許是這樣,或者不是。 – regilero 2011-01-06 22:34:24

回答

4

的第一個參數ob_start是一個回調。

要理解這是什麼,你必須檢查PHP的definition of callback

具體而言,它說

一個實例化的對象的方法是 作爲含有 對象索引0處的陣列,並且該方法名 索引1

傳遞所以,當輸出緩衝完成時,實際做的是呼叫$this->parseTemplate();

雖然我不確定是否需要參考運算符&

+0

不需要參考運算符。 – 2011-01-06 22:12:45

2

ob_start()ob_start()是輸出緩衝,傳入的參數應該是一個回調,當緩衝區用ob_flush(),ob_clean()或類似的函數刷新時會被調用。

// Type 3: Object method call 
$obj = new MyClass(); 
call_user_func(array($obj, 'myCallbackMethod')); 
1

不知道失敗的輸出是什麼,我可以猜測2件事。 在版本5.3。*中,不需要引用實例,因此&$this只需要$this。 另一件事就是在我知道的任何緩衝區輸出之前需要調用ob_start ...

+0

您可以在輸出之前或之後調用它。沒有什麼區別。 – profitphp 2011-01-06 22:16:30

相關問題