2016-08-23 23 views
7

Mam listę funkcji, które uruchamiają dość głęboką rutynę, aby określić, z której strony post_id ma pobierać zawartość i wyświetlać ją w interfejsie witryny.Najlepszy sposób określenia, czy dana funkcja ma wyjście?

Gdy ta funkcja zwraca zawartość, chcę ją opakować w opakowanie HTML. Chcę, aby to opakowanie HTML było ładowane tylko wtedy, gdy funkcja ma dane wyjściowe do zwrócenia.

Na przykład, mam następujący ...

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; 
} 

w pełnych wyjaśnień, mam następujący ...

Jeśli jedna z tych funkcji zwraca wyjściechcę go opakowany w wrapper html, więc teoretycznie coś takiego jest, co staram się osiągnąć ...

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); 
} 

wiem teraz, z wyprzedzeniem Nie chcę określać dwa razy (raz na początku i raz na końcu), jeśli jedna z funkcji wyjściowych ma wyjście, kiedy powinien istnieć sposób na zrobienie tego za pomocą jednego czeku, ale chciałbym zacząć od początku to królicza dziura i wymyśl najlepszy sposób na ustalenie, czy moja funkcja zwraca coś, czy nie.

Jeśli istnieje lepszy sposób podejścia, proszę wyjść na całość, lol i daj mi znać.

Spojrzałem online w tym artykule i inni @Find out if function has any output with php

Więc w końcu, chciałem tylko wiedzieć, czy istnieje lepszy sposób podejść do tego i to, co jest rzeczywiście najlepszy sposób uważasz, aby sprawdzić, czy moje funkcje mają dane wyjściowe do zwrócenia, więc mogę uruchomić mój opakowaniu html na podstawie tych warunków?

Czy byłby to najlepszy sposób na ob_get_length? Kiedy patrzyłem na cele, ten wydawał się najlepszy i najprostszy, ale chciałem uzyskać porady i informacje zwrotne. A może mogę sprawdzić, czy zwrócono moją zmienną $content? Dzięki. Naprawdę to doceniam!

+1

Jak pisałem to już widzę, że być może najlepszy sposób, aby uruchomić sprawdzanie mniej jest łączenie moich funkcji wyjściowych w jeden output_header funkcji. Wtedy mogę raz sprawdzić, przeciwko tej jednej funkcji, zamiast przeciwko 3 różnym funkcjom. Ale nadal chciałbym wiedzieć o najlepszym sposobie sprawdzenia, czy funkcja zwraca i wyprowadza, czy nie. - Dzięki! Doceniam to. –

+2

To powiązane pytanie i prawdopodobnie jest to, co chcesz zrobić. Po prostu przechwyć wyjście funkcji i sprawdź, czy jest pusty, czy nie. – Rizier123

+0

Dzięki. 2 rzeczy. Zastanawiam się, czy mogę po prostu sprawdzić, czy moja zmienna $ content jest zwracana, ponieważ jeśli nie jest, to oczywiście nie ma treści do wyprowadzenia, więc na tej podstawie uruchamiam moją opakownię HTML. Czy to jest możliwe? Alternatywnie z tym, co powiedziałeś, czy buforowanie wyjścia może być włączone poza funkcją w klasie? W ten sposób mogłem go włączyć przed moimi trzema wyjściami nagłówkowymi i wyłączyć je później, zamiast włączać i wyłączać w ramach każdej funkcji. Rozejrzałem się dookoła i nie widziałem niczego, co by mówiło lub pokazywało, czy można to zrobić, czy też można to zrobić z klasą? @ Rizier123 –

Odpowiedz

1

Możesz przechwycić wynik i zapisać go w zmiennej, która następnie jest przekazywana do funkcji empty().

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

ten wykonuje swoją funkcję, przechowuje dane wyjściowe w zmiennej ($ wyjścia w tym przypadku) i wykonuje empty() aby sprawdzić zawartość zmiennych. Możesz później użyć zawartości $ output.

Należy pamiętać, że empty() uznaje puste ciągi lub 0 jako "puste", dlatego zwraca true.

Jako alternatywę możesz użyć funkcji takich jak isset(), aby określić, czy zmienna nie jest null.

http://php.net/isset

http://php.net/empty

+0

Awesome! Dzięki za to. Testowane, działa świetnie. Proste, lekkie też :) Napisałem przykład porównując TRUE vs. FALSE w gist @ https://gist.github.com/NoahjChampion/c83bfcdd6270397261ac5b7458d797cc - Dla siebie i jeśli chcesz, możesz zaktualizować swoją odpowiedź za pomocą tego kodu. Tak czy siak, dzięki! :) Doceniam to! @GxTruth –