2016-08-23 61 views
7

我有一個函數列表,它運行一個相當深的例程,以確定從哪個post_id獲取其內容並將其輸出到網站的前端。確定函數是否有輸出的最佳方法?

當這個函數返回它的內容時,我希望它被包裝在一個html包裝器中。我希望這個html包裝只有在函數有返回輸出時才加載。

在例子中,我有以下...

public static function output_*() { 
    // my routines that check for content to output precede here 
    // if there IS content to output the output will end in echo $output; 
    // if there is NO content to output the output will end in return; 
} 

在充分的解釋,我有以下...

如果這些函數之一返回輸出我希望它被包裹在一個HTML,所以理論上是這樣的就是我試圖完成......

public static function begin_header_wrapper() { 
    // This only returns true if an output function below returns content, 
    // which for me is other than an empty return; 
    include(self::$begin_header_wrapper); 
} 

public static function output_above_header() { 
    // my routines that check for content to output precede here 
    // if there is content to return it will end in the following statement 
    // otherwise it will end in return; 
    include($begin_markup); // This is the BEGIN html wrapper for this specifc output 
    // It is, so let's get this option's post id number, extract its content, 
    // run any needed filters and output our user's selected content 
    $selected_content = get_post($this_option); 
    $extracted_content = kc_raw_content($selected_content); 
    $content = kc_do_shortcode($extracted_content); 
    echo $content; 
    include($end_markup); // This is the END html wrapper for this specifc output 
} 
public static function output_header() { 
    // the same routine as above but for the header output 
} 
public static function output_below_header() { 
    // the same routine as above but for the below header output 
} 

public static function end_header_wrapper() { 
    // This only returns true if an output function above returns content, 
    // which for me is other than an empty return; 
    include(self::$end_header_wrapper); 
} 

我現在知道了,時間提前如果其中一個輸出函數具有輸出,我不想確定兩次(一次在開始,一次在末尾),但應該有一種方法可以通過一次檢查來完成此操作,但是我想要開始這個兔子洞,並找出確定我的函數是否返回的最好方法。

或者如果有一個完全更好的方法來接近這個請全力以赴,大聲笑,讓我知道。

我在網上看了這篇文章和其他 @Find out if function has any output with php

所以最後,我只是想知道是否有更好的方式來處理這一點,什麼是真正的你想檢查的最佳途徑我的函數有一個輸出返回,所以我可以運行我的HTML包裝基於這些條件?

ob_get_length是最好的方法嗎?當我查看ob的目的時,這個看起來最好,也是最簡單的,但想得到一些建議和反饋。或者,也許我可以檢查我的變量$content是否被返回?謝謝。真的很感激它!

+1

當我寫這我也能看到,也許到運行檢查少是我的輸出功能結合成一個output_header功能的最佳途徑。然後我可以檢查一次,而不是針對3種不同的功能。但我仍然想知道檢查函數返回和輸出與否的最佳方法。 - 謝謝!欣賞它。 –

+2

這可能與你想要做的事情有關。只需捕獲函數的輸出並檢查它是否爲空。 – Rizier123

+0

謝謝。 2件事。我想知道是否可以檢查我的變量$ content是否被返回,因爲如果它不是,那麼顯然沒有內容輸出,所以我運行我的html包裝器。那可能嗎?或者用你所說的,可以輸出緩衝在一個類內的一個函數之外打開嗎?這樣我可以在我的三個頭文件輸出之前打開它,並在之後關閉它,而不是在每個函數中打開和關閉它。我環顧四周,沒有看到任何說明或顯示這是否可以通過班級完成的具體內容? @ Rizier123 –

回答

1

您可以捕獲結果並將其存儲在一個變量中,然後將該變量賦給empty()函數。

if(!empty(($output = yourFunctionToTest(param1, paramN)))) { 
    // do something with $output (in this case there is some output 
    // which isn't considered "empty" 
} 

這將執行您的函數,將輸出存儲在一個變量(在這種情況下爲$ output)並執行empty()以檢查變量內容。 您可以使用之後的$輸出內容。

請注意,empty()將空字符串或0視爲「空」,因此返回true

作爲替代方案,您可以使用函數isset()來確定變量是否不是null

http://php.net/isset

http://php.net/empty

+0

太棒了!謝謝你。測試過,效果很好。簡單,輕也:)我寫了一個例子比較TRUE與FALSE在gist @ https://gist.github.com/NoahjChampion/c83bfcdd6270397261ac5b7458d797cc - 對於我自己,並隨時更新您的答案與該代碼,如果你想。無論哪種方式,謝謝! :)欣賞它! @GxTruth –

相關問題