2013-04-12 5 views
6

Gibt es einen kurzen Weg, um zu überprüfen, ob eine Variable gesetzt ist, und sie dann zu wiederholen, ohne den gleichen Variablennamen zu wiederholen?Prüfen, ob Variable gesetzt ist und dann Echo ohne Wiederholung wiederholen?

Statt dessen:

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

Ich denke an etwas in den Zeilen dieses C-Stil Pseudo-Code:

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

PHP sprintf hat, aber es hat nicht ganz das tun, was Ich hatte gehofft. Wenn ich natürlich eine Methode/Funktion daraus machen könnte, aber sicherlich muss es einen Weg geben, es "nativ" zu machen?

Update: Ternäre Operationen würde auch die $this->variable Teil wiederholen, wenn ich es verstanden habe?

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

Ich bin nicht bekannt, dass eine Abkürzung dafür. Wenn Sie es häufig verwenden, würde ich trotzdem empfehlen, eine Funktion dafür zu erstellen. – str

+0

Ternäre Operation ('(bool)? Wert: Standard') ist keine Option? – BlitZ

Antwort

0

Verwenden isset Funktion von PHP wie folgt aus:

<?php 

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

?> 

ich denke, das wird helfen.

+0

Die '$ this-> Variable würde sich immer noch in dem Teil" tue etwas "wiederholen. Ich würde es gerne tun, ohne es mehrmals im Befehl zu wiederholen. (downvote war nicht meins ...) –

+0

ich habe meine antwort bearbeitet bitte überprüfen sie jetzt. – saveATcode

13

Die nächstgelegene Sie zu dem, was Sie suchen, erhalten können kurze Form ternären Operators (verfügbar seit PHP5.3)

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

Aber das löst „nicht definiert Variable“ Mitteilung verwendet. Welche Sie können natürlich mit @

echo @$a ?: "not set"; 

Noch nicht der eleganteste/sauberen Lösung unterdrücken.

Also, das sauberste Code, den Sie hoffen kann, ist

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

Oft verwende ich eine ähnliche Technik, aber mit leeren, die auch für leere Zeichenfolgen – christian

+0

Gut denken. Schade, es gibt keine integrierte PHP-Funktion und auch nicht überraschend. –

10

Update:

PHP 7 eine neue Funktion eingeführt: Null coalescing operator

Hier ist das Beispiel von 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'; 
?> 

Für diejenigen, die nicht PHP7 mit noch hier ist meine ursprüngliche Antwort ...

ich eine kleine Funktion verwenden, um dies zu erreichen:

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

Beispiel:

$a = 'potato'; 

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

Vorbehalt: Wie Inigo in einem Kommentar darauf hingewiesen hat, besteht ein unerwünschter Nebeneffekt der Verwendung dieser Funktion darin, dass sie das Objekt/das Array, das Sie untersuchen, modifizieren kann.Zum Beispiel:

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

Will Ausgang:

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

Ich dachte auch darüber nach. Jedoch tritt das folgende Problem auf: $ data = []; $ Daten ['a'] = 2; Echo Ifset ($ Daten ['b']); var_dump ($ Daten); Gibt Array zurück (2) {["a"] => int (2) ["b"] => NULL}. Also ändert die ifset-Funktion tatsächlich das ursprüngliche Datenobjekt ... – Inigo

+1

Sie haben völlig Recht Inigo - das hätte ich nie realisiert, wie das normalerweise bei Arrays nicht der Fall ist. Sieht so aus, als müssten wir warten, bis wir PHP7 für eine Lösung verwenden, die das ursprüngliche Objekt definitiv nicht verändert. –

Verwandte Themen