2011-04-29 66 views
27

我們都遇到過它,需要在輸入字段中輸出一個變量,但不知道是否設置了var,就像這樣。基本上這是爲了避免e_warning。什麼是PHP簡寫:print var if var存在

<input value='<?php if(isset($var)){print($var);}; ?>'> 

我該怎麼寫這個更短?我很好介紹這樣一個新的功能:

<input value='<?php printvar('myvar'); ?>'> 

但我沒有成功寫入printvar()函數。

+6

'回聲(?isset($ VAR)是$ var: '')'大約是短,你可以得到,並語法正確。 – 2011-04-29 19:43:55

+0

沒有爲它做功能我認爲@Marc B提供了最短的方式來做到這一點...在評論不低於! – afuzzyllama 2011-04-29 21:56:29

回答

59

我的建議是建立一個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 ?? '' ?> 
+1

你爲什麼要通過引用進行調用?沒有足夠的價值?此外,默認值是PHP中的一個關鍵字,因此不要將它用作函數名稱。它在我的服務器上有奇怪的結果。 – afuzzyllama 2011-04-29 22:15:54

+11

@afuzzyllama:因爲我需要傳遞一個潛在的未定義變量。如果我遺漏了參考資料,它會給你一個未定義的變量通知;) – NikiC 2011-04-29 22:18:14

+1

很高興知道,謝謝! – afuzzyllama 2011-04-29 22:23:42

0

更好地使用適當的模板引擎 - https://stackoverflow.com/q/3694801/298479提到兩個很好的模板引擎。

這是你無論如何功能 - 如果在全球範圍內存在VAR它只會工作:

function printvar($name) { 
    if(isset($GLOBALS[$name])) echo $GLOBALS[$name]; 
} 
+0

對不起,尋找非全局變量的解決方案。 – bart 2011-04-29 19:33:08

+0

在這種情況下..得到一個模板引擎。 – ThiefMaster 2011-04-29 19:34:23

-4
$var; 
(isset($var)) ? (print $var) : ''; 

$var = 'hello var'; 
(isset($var)) ? (print $var) : ''; 
+2

這甚至不是有效的PHP ... – ThiefMaster 2011-04-29 19:31:37

+0

非常複雜......我的意思是很多機會編寫語法錯誤。 – bart 2011-04-29 19:32:34

+0

呃......好的我修好了 – 2011-04-29 19:37:06

2
<input value='<?php @print($var); ?>'> 
+14

錯誤/警告/通知抑制非常髒。 – ThiefMaster 2011-04-29 19:32:11

+12

我會再說一遍:哦親愛的上帝*請*不要壓制錯誤.. – 2011-04-29 19:33:04

+3

它是骯髒的,如果它是抑制一個實際的錯誤。花費時間是否真的值得,或者當更簡單的解決方案就足夠時,增加代碼的複雜性?只要你知道你在做什麼,以及爲什麼警告被壓制,這是好的。 – 2011-05-27 19:58:42

0

你可以做<?php echo @$var; ?>.或者<?= @$var ?>

+15

錯誤/警告/通知抑制非常髒。 – ThiefMaster 2011-04-29 19:32:24

+8

噢親愛的上帝*請*不要壓制錯誤.. – 2011-04-29 19:32:55

+3

@demian/thief:我同意是否抑制函數的錯誤,但坦率地說,在輸出情況下抑制變量的「未定義」警告是可以允許的 – 2011-04-29 19:34:55

-1
<input value='<?php printvar(&$myvar); ?>' /> 

function printvar(&$val) { 
    if (isset($val)) echo $val; 
} 
+0

不起作用。將var傳遞給函數將導致通知。不知道它是否可以與參考一起工作...可能值得一試。 – ThiefMaster 2011-04-29 19:34:00

+0

@ThiefMaster:同時想到同一件事:-) – mellamokb 2011-04-29 19:34:20

9

另一種選擇:

<input value="<?php echo isset($var) ? $var : '' ?>"> 
+0

是的,但它也會發出E_NOTICE。檢查它是否設置首先解決這個問題。 – Galen 2011-04-29 20:13:16

+0

+1和'」>>使得它更短。 – 2014-08-23 12:27:05

0

目前旗下有沒有在PHP可以做到這一點,你真的不能用PHP編寫一個函數要麼做到這一點。你可以做以下,以實現自己的目標,但它也有定義的變量,如果它不存在的副作用:

function printvar(&$variable) 
{ 
    if (isset($variable)) { 
     echo $variable; 
    } 
} 

這將允許你這樣做printvar($foo)printvar($array['foo']['bar'])。但是,執行IMO的最佳方法是每次使用isset。我知道這很煩人,但沒有任何好方法。不推薦使用@

欲瞭解更多信息,請參閱https://wiki.php.net/rfc/ifsetor

+0

不應該是'if(isset($ variable)){' – 2012-02-29 21:44:11

+0

@ Rob2211是的,好趕上:) – mfonda 2012-03-01 22:28:38

1

最簡短的回答,我可以想出是<?php isset($var) AND print($var); ?>

進一步的細節here on php manual

一個簡單的替代if語句,幾乎就像三元運算符一樣,就是使用AND。考慮以下內容:

'; //這是一個替代 isset($ value)AND print($ value); ?>

由於某些原因,這不適用於echo()。我覺得這非常有用!

0

這爲我工作:

<?= isset($my_variable) ? $my_variable : $my_variable="Some Value"; ?> 
相關問題