我們都遇到過它,需要在輸入字段中輸出一個變量,但不知道是否設置了var,就像這樣。基本上這是爲了避免e_warning。什麼是PHP簡寫:print var if var存在
<input value='<?php if(isset($var)){print($var);}; ?>'>
我該怎麼寫這個更短?我很好介紹這樣一個新的功能:
<input value='<?php printvar('myvar'); ?>'>
但我沒有成功寫入printvar()函數。
我們都遇到過它,需要在輸入字段中輸出一個變量,但不知道是否設置了var,就像這樣。基本上這是爲了避免e_warning。什麼是PHP簡寫:print var if var存在
<input value='<?php if(isset($var)){print($var);}; ?>'>
我該怎麼寫這個更短?我很好介紹這樣一個新的功能:
<input value='<?php printvar('myvar'); ?>'>
但我沒有成功寫入printvar()函數。
我的建議是建立一個issetor
功能:
function issetor(&$var, $default = false) {
return isset($var) ? $var : $default;
}
這需要一個變量作爲自變量,如果存在,則返回它,或者默認值,如果它沒有。現在,你可以這樣做:
echo issetor($myVar);
還能用它在其他情況下:
$user = issetor($_GET['user'], 'guest');
由於PHP 7,你可以使用null-coalesce operator:
$user = $_GET['user'] ?? 'guest';
或者在你的用法:
<?= $myVar ?? '' ?>
你爲什麼要通過引用進行調用?沒有足夠的價值?此外,默認值是PHP中的一個關鍵字,因此不要將它用作函數名稱。它在我的服務器上有奇怪的結果。 – afuzzyllama 2011-04-29 22:15:54
@afuzzyllama:因爲我需要傳遞一個潛在的未定義變量。如果我遺漏了參考資料,它會給你一個未定義的變量通知;) – NikiC 2011-04-29 22:18:14
很高興知道,謝謝! – afuzzyllama 2011-04-29 22:23:42
更好地使用適當的模板引擎 - https://stackoverflow.com/q/3694801/298479提到兩個很好的模板引擎。
這是你無論如何功能 - 如果在全球範圍內存在VAR它只會工作:
function printvar($name) {
if(isset($GLOBALS[$name])) echo $GLOBALS[$name];
}
對不起,尋找非全局變量的解決方案。 – bart 2011-04-29 19:33:08
在這種情況下..得到一個模板引擎。 – ThiefMaster 2011-04-29 19:34:23
$var;
(isset($var)) ? (print $var) : '';
$var = 'hello var';
(isset($var)) ? (print $var) : '';
這甚至不是有效的PHP ... – ThiefMaster 2011-04-29 19:31:37
非常複雜......我的意思是很多機會編寫語法錯誤。 – bart 2011-04-29 19:32:34
呃......好的我修好了 – 2011-04-29 19:37:06
<input value='<?php @print($var); ?>'>
錯誤/警告/通知抑制非常髒。 – ThiefMaster 2011-04-29 19:32:11
我會再說一遍:哦親愛的上帝*請*不要壓制錯誤.. – 2011-04-29 19:33:04
它是骯髒的,如果它是抑制一個實際的錯誤。花費時間是否真的值得,或者當更簡單的解決方案就足夠時,增加代碼的複雜性?只要你知道你在做什麼,以及爲什麼警告被壓制,這是好的。 – 2011-05-27 19:58:42
你可以做<?php echo @$var; ?>.
或者<?= @$var ?>
。
錯誤/警告/通知抑制非常髒。 – ThiefMaster 2011-04-29 19:32:24
噢親愛的上帝*請*不要壓制錯誤.. – 2011-04-29 19:32:55
@demian/thief:我同意是否抑制函數的錯誤,但坦率地說,在輸出情況下抑制變量的「未定義」警告是可以允許的 – 2011-04-29 19:34:55
<input value='<?php printvar(&$myvar); ?>' />
function printvar(&$val) {
if (isset($val)) echo $val;
}
不起作用。將var傳遞給函數將導致通知。不知道它是否可以與參考一起工作...可能值得一試。 – ThiefMaster 2011-04-29 19:34:00
@ThiefMaster:同時想到同一件事:-) – mellamokb 2011-04-29 19:34:20
另一種選擇:
<input value="<?php echo isset($var) ? $var : '' ?>">
是的,但它也會發出E_NOTICE。檢查它是否設置首先解決這個問題。 – Galen 2011-04-29 20:13:16
+1和'」>>使得它更短。 – 2014-08-23 12:27:05
目前旗下有沒有在PHP可以做到這一點,你真的不能用PHP編寫一個函數要麼做到這一點。你可以做以下,以實現自己的目標,但它也有定義的變量,如果它不存在的副作用:
function printvar(&$variable)
{
if (isset($variable)) {
echo $variable;
}
}
這將允許你這樣做printvar($foo)
或printvar($array['foo']['bar'])
。但是,執行IMO的最佳方法是每次使用isset
。我知道這很煩人,但沒有任何好方法。不推薦使用@
。
欲瞭解更多信息,請參閱https://wiki.php.net/rfc/ifsetor。
不應該是'if(isset($ variable)){' – 2012-02-29 21:44:11
@ Rob2211是的,好趕上:) – mfonda 2012-03-01 22:28:38
最簡短的回答,我可以想出是<?php isset($var) AND print($var); ?>
進一步的細節here on php manual。
'; //這是一個替代 isset($ value)AND print($ value); ?>一個簡單的替代if語句,幾乎就像三元運算符一樣,就是使用AND。考慮以下內容:
由於某些原因,這不適用於echo()。我覺得這非常有用!
這爲我工作:
<?= isset($my_variable) ? $my_variable : $my_variable="Some Value"; ?>
'回聲(?isset($ VAR)是$ var: '')'大約是短,你可以得到,並語法正確。 – 2011-04-29 19:43:55
沒有爲它做功能我認爲@Marc B提供了最短的方式來做到這一點...在評論不低於! – afuzzyllama 2011-04-29 21:56:29