6

セッションから値を取得したいのですが、定義されていない場合はデフォルトを使用します。そしてもちろん、PHPの通知を回避したいと思います。

これを行う関数を書くことができます

function get(&$var, $default){
    if(isset($var)) return $var;
    return $default;
}

echo get($foo, "bar\n");
$foobar = "foobar";
echo get($foobar, "ERROR");

実例

すべてのファイルでこの関数を定義せずにこれを行う方法はありますか?

4

6 に答える 6

9

require_once1 つのスクリプトで定義してから、そのスクリプトを他のスクリプトで定義できます。

三項演算子を使用することもできます。

$myVar = isset($var)?$var:$default;
于 2012-06-22T17:46:30.627 に答える
0

必要なことを行うために使用するコードを減らします。

_?_:_形式を使用して変数を再度指定する必要はありません。

echo $var?:"default";

と同じです

echo $var?$var:"default";

空のチェックに関しては、@通知をミュートするために使用できます。技術的な影響についてはわかりませんが、この形式を使用しているときにすでに独自のチェックを行っています。

echo @$non_existing_var?:"default";

いくつかの例:

<?php

    $nope = null;
    $yup = "hello";
    echo ($nope?:$yup) . "\n" ;
    echo ($yup?:$nope)  . "\n" ;

    $items = [ 'one', 'two', false, 'three', 'four', null ];

    foreach($items as $item):
        echo($item?:"default shown (".var_export($item,true).")")."\n";
    endforeach;

    echo(@$non_existing?:"default for non-existant variable!");

?>

出力:

$ php variabledefault.php
 hello
 hello
 one
 two
 default shown (false)
 three
 four
 default shown (NULL)
 default for non-existant variable!%                                                                                                                   
于 2014-05-23T15:16:48.927 に答える
0

この場合、私の小さなライブラリValueResolverを使用できます。たとえば、次のようになります。

$myVar = ValueResolver::resolve($var, $default);

名前空間を使用することを忘れないでくださいuse LapaLabs\ValueResolver\Resolver\ValueResolver;

たとえば、変数の値が である必要がある場合など、型キャストする機能もあるintegerので、これを使用します。

$id = ValueResolver::toInteger('6 apples', 1); // returns 6
$id = ValueResolver::toInteger('There are no apples', 1); // returns 1 (used default value)

その他の例については、ドキュメントを確認してください

于 2015-07-09T10:17:16.693 に答える