2016-04-13 27 views
3

は何かである:php、isset - デフォルト値です。簡略化できますか?ここ

$result = $this->getSomething(); 

$db = new Db(); 
$db->save($result['DATA']); // might exists or not 
$db->save($result['IP']); // might exists or not 
$db->save($result['X']); // might exists or not 

が、これらの配列のキーが存在することが確認されていません。コーラスの私はいつもこれを書くことができます:

​​

しかし、非常に面倒な仕事です。これを単純化する方法はありますか?

+1

を気にすることなく、結果で動作するので、彼らは上書きさsomeDataが)の代わりに、配列の

/** * @return SomeData */ public function getSomething() { /* * some code */ return new SomeData($data, $x, $ip); } 

someDataがクラス

class SomeData { private $data; private $ip; private $x; public function __construct($data, $ip, $x) { $this->data = $data; $this->ip = $ip; $this->x = $x; } /** * @return mixed */ public function getData() { return $this->data; } /** * @param mixed $data */ public function setData($data) { $this->data = $data; } /** * @return mixed */ public function getIp() { return $this->ip; } /** * @param mixed $ip */ public function setIp($ip) { $this->ip = $ip; } /** * @return mixed */ public function getX() { return $this->x; } /** * @param mixed $x */ public function setX($x) { $this->x = $x; } } 

とfinaly必要な結果を表示するか、失敗した場合はデフォルトのままにします。 – Burki

+1

@Burkiいいえ '$ result-> getSomething()によって返される値を' $ result'変数全体で取得できないので、彼はできません –

答えて

2
$result = $this->getSomething(); 
$result += array_fill_keys(['DATA', 'IP', 'X'], null); 

これは、存在しないこれらのいずれかのキーに、nullを設定します。
$result = $this->getSomething() + array_fill_keys(..);と記述することもできます。

+1

あなたのコードを維持することを考えるなら、これは悪いデザインです。新しい連想配列キーをあなたのリストに入れることについて常に考える必要があります。コードが必要な箇所でコードを使って何をするかを確認する必要があります。例: '$ db-> save($ result ['X']);変数が利用できない場合、値は' null'に設定されていることが分かります。 –

+1

あなたはそこにポイントを持っていますが、同じスクリプト内で同じキーに何度もアクセスしたいのですが?それは価値が毎回存在しないことを期待しなければならない反復的なものになります。これは、スコープの上部で使用すると予想されるすべての変数を初期化するのと同じです。 – deceze

+1

はい、もしあなたがそれらを再利用したいのであれば、それは痛みです。私はいつもPHPのようなものを嫌い、この答えに掲載されたBerry Langerakのようなコアレス演算子でPHP 7のオプションを楽しみにしています。 –

1

あなたがこれを行うことができます(すべてのは、とにかく使用して開始する必要があります)PHP 7でスタート

$data = !isset($result['DATA']) ? null : $result['Data']; 
$ip = !isset($result['IP']) ? null : $result['IP']; 
etc... 
5

を、あなたは新しい合体演算子を使用することができますこれを行う:

$db->save($result['DATA'] ?? null); 
+2

確かにこのケースでは+1ですが、同じキーの同じスクリプト内でこれを複数回実行する必要がある場合は、これはむしろ反復的になる可能性があります... – deceze

1

OOPの方法を使用する方がよいでしょう。

getSomething()はあるクラスのインスタンスを返さなければなりません。あなたは、事前にそれらを宣言することができISSETとなど

$result = $this->getSomething(); 

$db = new Db(); 
$db->save($result->getData()); 
$db->save($result->getIp()); 
$db->save($result->getX()); 
関連する問題