Бъдете внимателни с PHP празен, когато го използвате в WordPress преки пътища

Много често на уеб ресурсите има примери за изучаване и разработване на приставки за Wordpress, които предлагат използването на PHP празен, за да проверите атрибутите на шорткодовете. Но нека да разберем как работи тази функция и какви грешки могат да възникнат, ако не се използва правилно.

Характеристики на функцията empty (), която трябва да знаете

Според ръководствата на php.net, тази функция проверява дали празната променлива е празна. Ако променливата не съществува, тогава empty () няма да даде грешка. Например, нека променливата $ foo да не бъде зададена на:

ако (празна ($ foo)) {echo "променливата е празна";} //ще покаже "променлива е празна"
7) Следователно е необходима допълнителна проверка от isset () функцията:

$ foo = 1; 
if (isset ($ foo) & amp ;! empty ($ foo)) {echo "променлива =". $ foo;} //ще покаже "variable = 1"

, който PHP празен () смята за празен, е:

  • "" (редове - strlen (") == 0);
  • 0 (цели числа - (int) 0);
  • 0.0 (плаващи числа - 0.0)
  • "0" (низове - strlen ("0") == 1);
  • NULL;
  • FALSE
  • масив () (празни масиви - брой (масив ()) == 0).
$ string_1 = ";
echo strlen ($ string_1); //изход 0
ако (празен ($ string_1)) {echo 'string_1 е празен';} //ще отпечата string_1 е празен

$ string_2 = '0';
echo strlen ($ string_2); //изход 1
ако (празен ($ string_2)) {echo 'string_2 е празен';} //връща "string_2 е празен"

Низът ($ string_2), който е един знак с нула ('0'), също изглежда празен.

& lt; скрипт async = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
& lt ;! - fb_336x280_1 ->

& lt; script & gt; (adsbygoogle = прозорец).

$ string_3 = '';
ехоstrlen ($ STRING_3); //отпечатва 1
, ако (празна ($ STRING_3)) {ехо "STRING_3 е празна";} //нищо не се отпечатва

Нека разгледаме практически PHP приложение празен и виж като тази функция може да доведе до неочаквани резултати.

Използване на функцията празен () за тестване атрибути shortkoda приставка за Wordpress

Например, разработи плъгин за Wordpress, които чрез shortkodov се показва на членове от различни автори. На сметката си всеки автор ще покаже своя собствена статия ("аз") и членове от други автори ("друг") миналия месец. С shortkoda може да контролира броя на изходните документи. По подразбиране, ако атрибутите на "аз" и "друг" не е зададен, изход, например, си 25 публикации и 15 публикации на други автори.

и LT; скрипт асинхронен = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
и LT ;! - fb_336x280_2 - & GT;

и LT; скрипт & GT; (Adsbygoogle = window.adsbygoogle || []) Push ({}).
[author_posts]

за промяна на стойността, добавя още редица атрибути shortkoda

[author_posts самостоятелно = "10" още = " 5 "]

Нека видим какво код щепсел

"
"друг" = & GT; ",
)
$ ATTS,
"author_posts"
);
, ако (! Празните ($ ATTS ["самостоятелно '])) {
ехо $ ATTS [" самостоятелно'] "Post (и)".
} друг {
ехо "25 самостоятелно съобщения" (! Празните ($ ATTS ["друг"])).}
, ако {
ехо ATTS $ ["друг"] "пост (и) ";
} друг {
ехо "15 публикации на други автори";
}
}
add_shortcode ("author_posts", "posts_shortcode");

Тук ние просто да отпечатате данни, които потребителят преминали през shortkod. В резултат на това ние виждаме, техните мнения 10 и 5 - други автори.


и LT; скрипт тип = "текст /JavaScript" & GT;
Var blockSettings2 = {blockId: "R-A-70350-39", renderTo: "yandex_rtb_R-A-70350-39", асинхронен :! 0};
ако (document.cookie.indexOf ("abmatch =") и GT = 0)blockSettings2.statId = 70350;
Функция (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (функция () {Ya.Context.AdvManager.render (blockSettings2)}), e = b.getElementsByTagName ("скрипт") , d = b.createElement ("скрипт"), d.type = "text /javascript", d.src = "//an.yandex .ru /system /context.js ", d.async =! 0e.parentNode.insertBefore (d, e)} (това, този.документ," yandexContextAsyncCallbacks ");

Ако не искаме да видим, например, постовете на други автори, тогава ще напишем краткия код "друг = 0", а публикациите на други автори няма да бъдат показани. Но не! Функцията PHP empty () разглежда низ "0" като празна стойност и вместо "0" публикации на други автори показва стойността по подразбиране, т.е. 15 позиции вместо нула.

С други думи, тези две подобни записи:

[author_posts another = "0"]
[author_posts]

, променя състоянието:

$ is_null = (int) (- 1); 

„друг“ = & gt; $ is_null,

if ($ atts ['друг']> -1) {
echo $ atts ['друг']. "post (s)";
} else {
echo "15 публикации на други автори";
}

Ако атрибутът „друг“ не е посочен, то по подразбиране нека бъде (-1). Тогава в условието ще приемем, че атрибутът е даден, ако е по-голям (-1).

По този начин този къс код:

[author_posts another = "0"]

сега правилно ни показва, че по подразбиране, 25 статии от автора (например атрибутът "самостоятелно" не е посочен) и няма статии от други автори.

Пълен код:

", 
" друго "=> $ is_null,
,
$ atts, 115) "author_posts"
)
ако (! Empty ($ atts ['self'])))
echo $ atts ['self']. " mail (s)
";
} else {
echo" 25 самостоятелни поста
";}
if ($ atts ['друг']> -1) {{124} echo $ atts ['друг']. "
}
}
add_shortcode ('author_posts', 'posts_shortcode');
}
}


Можеш да мислиш за собственото си състояние, важно е,че сте видели функциите на функцията empty () и продължете да не правите грешки, когато го използвате. Сложете този файл в папката Wordpress "/wp_content /plugins /" активирайте плъгина в административния панел, той ще работи.

Опции за замяна на други PHP функции

За да разберете какво да замените празно (), трябва да знаем какво имаме, например:
  • ако е масив (array ()), тогава е по-добре да проверите неговите функции се броят или размери;
  • Ако променливата може да бъде невярна, използвайте if (false == $ var);
  • ако променливата не е зададена, тогава използвайки iset или is_null ();
  • номера са is_numeric ().
  • Много опции могат да бъдат намерени, за да направят вашата програма да работи възможно най-точно, да напишете своя собствена функция, която ще анализира данните, както ви е необходимо. Открихме, че празен PHP е функция, която проверява дали променливата е празна. Трябва да запомните кои стойности на променливи са зададени на нула, ако ги използвате в кода си, така че след това да не търсите защо програмата работи неправилно.

    Свързани публикации