Bądź ostrożny z PHP pustym, gdy używasz go w skrótach WordPress

Bardzo często istnieją przykłady zasobów internetowych do nauki i rozwijania wtyczek do Wordpressa, które sugerują użycie PHP puste, aby sprawdzić atrybuty shortcodes. Ale zastanówmy się, jak działa ta funkcja i jakie błędy mogą wystąpić, jeśli nie jest używana prawidłowo.

Cechy funkcji empty (), którą musisz znać

Zgodnie z instrukcjami na php.net, ta funkcja sprawdza, czy pusta zmienna jest pusta. Jeśli zmienna nie istnieje, to empty () nie spowoduje błędu. Na przykład załóżmy, że zmienna $ foo zainstalowane:

W przypadku (pusty ($ bla)) {echo "zmienna jest pusty"} //odbitki "zmienna jest pusta"

Dlatego potrzebujemy dodatkowej weryfikacji przez funkcję isset ():

$ foo = 1; 
if (isset ($ bla) i wzmacniacz, i wzmacniacz ;! pusty ($ bla)) {. echo "zmienna =" $ foo;} //odbitki "zmienna = 1"
,

Wartość , które PHP empty () uważa za puste, to:

  • "" (linie - strlen (") == 0);
  • 0 (liczby całkowite - (wewnętrzne) 0);
  • 0,0 (liczby zmiennoprzecinkowe - 0.0)
  • "0" (linie - strlen ("0") == 1)
  • ,
  • NULL, ,
  • FAŁSZ ;
  • array () (puste tablice - count (array ()) == 0).
$ STRING_1 = "
echa strlen ($ STRING_1) //wyświetla 0
if (empty ($ STRING_1)) {echo 'STRING_1 pusty';} //odbitki" STRING_1 jest pusta „

$ STRING_2 = '0',
echa strlen ($ STRING_2) //drukuje 1
if (empty ($ STRING_2)) {echo 'STRING_2 pusty';} //zwraca "string_2 is empty"

Łańcuch ($ string_2), który jest jednym znakiem z łańcuchem zero ("0"), również wygląda na pusty.

& lt; scenariusz asynchroniczny = „//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">,
Związek ;! - fb_336x280_1 - i kwasu

Związek pośredni scenariusz i kwasu (adsbygoogle = okno.

$ string_3 = '';
echostrlen ($ string_3); //wypisze 1
jeśli (pusty ($ string_3)) {echo 'string_3 jest pusty';} //nic nie zostanie wydedukowane

Rozważmy praktyczne zastosowanie PHP puste i zobaczmy, jak ta funkcja może prowadzić do nieoczekiwanego wyniku.

Zastosowanie funkcji empty () do sprawdzania atrybutów shortcode w wtyczkach do WordPressa

Na przykład tworzysz wtyczkę do Wordpressa, która będzie używała shortcodes do wyświetlania artykułów od różnych autorów. Na stronie konta każdy autor będzie wyświetlać własne artykuły ("self") i artykuły od innych autorów ("inny") w ciągu ostatniego miesiąca. Za pomocą krótkiego kodu można kontrolować liczbę wyników artykułu. Domyślnie, jeśli atrybuty "self" i "another" nie są ustawione, wyprowadzimy na przykład 25 własnych postów i 15 postów innych autorów.

& lt; script async = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
& lt ;! - fb_336x280_2 - & gt;

& lt; skrypt & gt; (adsbygoogle = window.adsbygoogle || []). push ({});
[author_posts]

Aby zmienić wartość, dodaj inną liczbę atrybutów shortcode:

[author_posts self = "10" another = " 5]]

Zobaczmy, co jest w kodzie wtyczki:

", 
" inny "= & gt;"
,
$ atts,
"author_posts"
);
if (! Empty ($ atts ['self'])) {
echo $ atts ['self']. "Post (s)";
} else {
echo "25 self posts";}
if (! Empty ($ atts ['another'])) {
echo $ atts ['another']. s) ";
} else {
echo "15 postów innych autorów";
}
}
add_shortcode ('author_posts', 'posts_shortcode');

Tutaj po prostu drukujemy dane, które użytkownik przekazał przez krótki kod. W rezultacie zobaczymy 10 własnych postów i 5 innych autorów.


& lt; script type = "text /javascript" & gt;
może blokować Ustawienia 2 = {ID bloku: "R-A-70350-39", renderTo: "yandex_rtb_R-A-70350-39", async:! 0};
if (document.cookie.indexOf ("abmatch =") & gt; = 0)blockSettings2.statId = 70350;
! Zastosowanie (a, b, c, d, e) {A [c] = A [c] || [] A [c] .Push (funkcja () {Ya.Context.AdvManager.render (blockSettings2)}), e = b.getElementsByTagName ("scenariusz")d = b.createElement ("scenariusz") d.type = "text /JavaScript" d.src = „//an.yandex .ru /System /context.js "d.async = 0e.parentNode.insertBefore (d, e)} (to this.document," yandexContextAsyncCallbacks „);

Jeżeli nie chcemy, aby zobaczyć, na przykład, pozycje innych autorów, pisać w shortkod „kolejną = 0”, a pozycje innych autorów wskazują. Ale nie! Funkcja PHP empty () znajdzie ciąg „0” jako pusta, a zamiast „0” pozycje innych autorów wyświetla wartość domyślna to 15 wpisów zamiast zera.

W Innymi słowy, te dwa podobne pozycje:

[author_posts inny = "0"]
[author_posts]
,

, aby shortkod działają prawidłowo , zmień warunek:

$ is_null = (int) (- 1); 

"inny" = & gt; $ Is_null
,
, jeżeli ($ atts ['inny'] & gt; 1) {
echo $ ATTS ['inny'] "post (y)".;
} else {
echo "15 postów innych autorów";
}

Jeśli atrybut "inny" nie jest określony, to domyślnie niech będzie (-1). Wtedy w warunku przyjmiemy, że atrybut jest podany, jeśli jest większy (-1).

Tak więc, ta shortkod

[author_posts inny = "0"]

są teraz dobrze, zastanawiamy się, że domyślna 25 Autor artykułów (na przykład atrybut "self" nie jest określony) i brak artykułów od innych autorów.

,

Kod:

'
' inny „= & gt; $ is_null
)
($ atts author_posts 115) ''
)
if (empty (! $ atts ['ja'])) {
echo $ atts ['ja'] ". Post (a)
"
} else {
echo" 25 własny stanowisk
„}
, jeżeli ($ atts ['inny'] & gt; 1) {
echo $ atts ['another']. " po (a)
"
} else {
echo" 15 wiadomości innego autorów
„,
}
}
add_shortcode ('author_posts', 'posts_shortcode' )


Możesz myśleć o swoim stanie, ważne,że widziałeś funkcje funkcji empty () i nadal nie popełniaj błędów podczas używania. Umieść ten plik w folderze Wordpress "/wp_content /plugins /" aktywuj wtyczkę w panelu administracyjnym, to zadziała.

Opcje zastępowania pustych () innych funkcji PHP

Aby zrozumieć, co zastąpić empty (), musimy wiedzieć, co mamy, na przykład:
  • jeśli jest to tablica (array ()), to lepiej jest sprawdzić jego funkcje liczyć lub sizeof;
  • Jeśli zmienna może mieć wartość false, należy użyć, jeśli (false == $ var);
  • jeśli zmienna nie jest ustawiona, to za pomocą iset lub is_null ();
  • liczb to is_numeric ().
  • Można znaleźć wiele opcji, aby program działał tak dokładnie, jak to możliwe, napisz własną funkcję, która przeanalizuje dane w razie potrzeby. Odkryliśmy, że pusty PHP to funkcja sprawdzająca, czy zmienna jest pusta. Musisz pamiętać, które wartości zmiennych są ustawione na zero, jeśli używasz go w kodzie, aby nie szukać przyczyny, dla której program działa niepoprawnie.

    Powiązane publikacje