2016-03-20 14 views
0

を理解ifelseは、私の理解の右か?

$account->getCity()を割り当てる他の変数$state$account->getCity()->getStates()の値を代入存在する場合、コード$state = $account->getCity() ? $account->getCity()->getStates() : null;はチェックしない場合、私はエラーに

Error: Call to a member function getCity() on a non-object

を取得mはので、私はこれを求めていますnull

理由があるさ$account->getCity()がヌルであるかどうかを確認するには、どのようにしてチェックするのですか。 $account->getCity()が他$stateから$account->getCity()->getStates()の値が割り当てnullでない場合

私が達成しようとしています出力は

あるだけで、それがnull作る

うまくいけば、私はあまりにも混乱鳴っていないです:)

+0

あなたが求めているのは、* 3進演算子*です。エラーは、三項演算子が間違っているのではなく、オブジェクトではないオブジェクト上でオブジェクトに使用されるように設計されたmathodを使用しようとしているという事実です。 '$ account'を定義する場所を確認して、 – Qirel

+0

@Qirelで' getCity() 'メソッドを使用できるオブジェクトであることを確認する必要があります。' $ account'はオブジェクトであり、時には'getCity()'はnullであり、時にはそれがなく、 'null'がエラーをスローしたときにそれが処理しようとしているときです。 '$ account-> getCity()'が 'null'のとき' $ state'をnullにしたい – Saadia

+0

'!empty($ account-> getCity())?代わりに$ account-> getCity() - > getStates():null; – Qirel

答えて

0

現在、「3進演算子」の略語を使用しています。ただし、$account->getCity()methodを使用して、$account->getCity()が存在するかどうかを調べて問題が発生しているかどうかを確認しています。

より良い方法は、isset($account->getCity())または(!empty($account->getCity()))を使用してそれが存在するかどうかを評価することです。 isset()が存在するかどうかをチェックします。ここでは、empty()は存在するかどうかをチェックし、値が入っています。たとえば、objectが実際にobjectであることを確認する必要があります。これはで行うことができます((is_object($account) && !empty($account->getCity())など)。

一般的な問題は、$variable = '';と同様に、変数またはオブジェクトを割り当てることができますが、内容が空であることです。 empty()を使用してチェックすると、この問題を横断して来る心配が軽減されます。

さらに3つの演算子は素晴らしいですが、truefalseの両方の条件が指定されている場合に最適です。あなたが主張している場合は、少なくとも''の代わりにnullを使用してください。

+0

多くのありがとう、 – Saadia