2013-04-12 17 views
6

Czy istnieje zwięzły sposób sprawdzenia, czy zmienna jest ustawiona, a następnie echo bez powtarzania tej samej nazwy zmiennej?Sprawdź, czy zmienna jest ustawiona, a następnie echo bez powtarzania?

Zamiast tego:

<?php 
    if(!empty($this->variable)) { 
     echo '<a href="', $this->variable, '">Link</a>'; 
    } 
?> 

myślę o czymś w liniach tego stylu C Pseudokod:

<?php 
    echo if(!empty($this->variable, '<a href="', %s, '">Link</a>')); 
?> 

PHP ma sprintf, ale to nie dość zrobić to, co Miałem nadzieję na to. Jeśli oczywiście mogę zrobić z tego metodę/funkcję, ale na pewno musi być jakiś sposób na zrobienie tego "natywnie"?

Aktualizacja: Potrójne operacje powtórzyłyby także część $this->variable, jeśli ją zrozumiałem?

echo (!empty($this->variable) ? '<a href="',$this->variable,'">Link</a> : "nothing"); 
+0

nie jestem świadomy każdej skrót do tego. Jeśli użyjesz go dużo, to w każdym razie polecam stworzenie dla niego funkcji. – str

+0

Ternary operation ('(bool)? Wartość: default') nie jest opcją? – BlitZ

Odpowiedz

0

Zastosowanie isset funkcja php tak:

<?php 

    echo $result = isset($this->variable) ? $this->variable : "variable not set"; 

?> 

myślę, że to pomoże.

+0

Zmienna '$ this-> nadal będzie się powtarzać w części" zrób coś ". Chciałbym to zrobić bez powtarzania go wielokrotnie w poleceniu. (downvote was not mine ...) –

+0

Edytowałem swoją odpowiedź. Sprawdź teraz. – saveATcode

13

najbliżej można dostać to, czego szukasz jest za pomocą krótkiej formy operatora potrójnego (dostępna od PHP5.3)

echo $a ?: "not set"; // will print $a if $a evaluates to `true` or "not set" if not 

Ale to wyzwoli „zmiennej Niezdefiniowany” uprzedzenia. Który można oczywiście tłumić z @

echo @$a ?: "not set"; 

Mimo to, nie jest to najbardziej eleganckie rozwiązanie czystej /.

Więc najczystszym kodu można liczyć to

echo isset($a) ? $a: ''; 
+1

Często używam techniki podobnej do tej, ale z pustymi, które również uwzględnia puste ciągi znaków – christian

+0

Dobre myślenie. Szkoda, że ​​nie ma wbudowanej funkcji PHP i zaskakujące. –

10

Aktualizacja:

PHP 7 wprowadza nową funkcję: Null coalescing operator

Oto przykład z php.net.

<?php 
// Fetches the value of $_GET['user'] and returns 'nobody' 
// if it does not exist. 
$username = $_GET['user'] ?? 'nobody'; 
// This is equivalent to: 
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; 

// Coalescing can be chained: this will return the first 
// defined value out of $_GET['user'], $_POST['user'], and 
// 'nobody'. 
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody'; 
?> 

Dla tych, którzy nie stosując PHP7 jeszcze tu jest mój oryginalny odpowiedź ...

używam małego funkcji do osiągnięcia tego celu:

function ifset(&$var, $else = '') { 
    return isset($var) && $var ? $var : $else; 
} 

Przykład:

$a = 'potato'; 

echo ifset($a);   // outputs 'potato' 
echo ifset($a, 'carrot'); // outputs 'potato' 
echo ifset($b);   // outputs nothing 
echo ifset($b, 'carrot'); // outputs 'carrot' 

Zastrzeżenie: Jak zauważył Inigo w komentarzu poniżej, jednym niepożądanym skutkiem ubocznym używania tej funkcji jest to, że może modyfikować obiekt/tablicę, którą kontrolujesz.Na przykład:

$fruits = new stdClass; 
$fruits->lemon = 'sour'; 
echo ifset($fruits->peach); 
var_dump($fruits); 

wyświetli:

(object) array(
    'lemon' => 'sour', 
    'peach' => NULL, 
) 
+1

Myślałem o tym również. Jednak pojawia się następujący problem: $ data = []; $ data ['a'] = 2; echo ifset ($ data ['b']); var_dump (dane $); Zwróci tablicę (2) {["a"] => int (2) ["b"] => NULL}. Tak więc funkcja ifset faktycznie modyfikuje oryginalny obiekt danych ... – Inigo

+1

Masz całkowitą rację Inigo - nigdy bym tego nie zauważył, ponieważ zazwyczaj nie używa się tego z tablicami. Wygląda na to, że będziemy musieli poczekać, aż użyjemy PHP7 do rozwiązania, które zdecydowanie nie modyfikuje oryginalnego obiektu. –