web-dev-qa-db-fra.com

Opérateur de coalescence nulle de C # (??) In PHP

Y a-t-il un opérateur ternaire ou similaire dans PHP qui agit comme ?? De c #?

?? En C # est propre et plus court, mais dans PHP, vous devez faire quelque chose comme:

// This is absolutely okay except that $_REQUEST['test'] is kind of redundant.
echo isset($_REQUEST['test'])? $_REQUEST['test'] : 'hi';

// This is perfect! Shorter and cleaner, but only in this situation.
echo null? : 'replacement if empty';

// This line gives error when $_REQUEST['test'] is NOT set.
echo $_REQUEST['test']?: 'hi';
50
dpp

PHP 7 ajoute l'opérateur Opérateur NULL COALESCE :

// 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';

Vous pouvez également examiner à court terme l'opérateur ternaire de PHP ? : (PHP> = 5.3 uniquement)

// Example usage for: Short Ternary Operator
$action = $_POST['action'] ?: 'default';

// The above is identical to
$action = $_POST['action'] ? $_POST['action'] : 'default';

Et votre comparaison avec C # n'est pas juste. "In PHP Vous devez faire quelque chose comme" - En C #, vous aurez également une erreur d'exécution si vous essayez d'accéder à un tableau/dictionnaire inexistant.

60
zerkms

Le Opérateur NULL FOALCECE , (??) a été accepté et mis en œuvre dans PHP 7 . Il diffère de l'opérateur Ternary court opérateur ternaire (?:) dans ce ?? supprimera le E_NOTICE Cela se produirait autrement lorsque vous essayez d'accéder à un tableau où il n'a pas de clé. Le premier exemple dans le RFC donne:

$username = $_GET['user'] ?? 'nobody';
// equivalent to: $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

Notez que le ?? opérateur ne nécessite pas l'application manuelle de isset pour empêcher le E_NOTICE.

50
kojiro

J'utilise la fonction. Évidemment, ce n'est pas un opérateur, mais semble plus propre que votre approche:

function isset_or(&$check, $alternate = NULL)
{
    return (isset($check)) ? $check : $alternate;
}

Usage:

isset_or($_REQUEST['test'],'hi');
9
LukLed

Avant PHP 7, il n'y en a pas. Si vous devez impliquer isset, le modèle à utiliser est isset($var) ? $var : null. Il n'y a pas ?: Opérateur qui inclut les caractéristiques de isset.

6
deceze