1

前に質問しようとしたのですが、質問が間違っていたので、もう一度質問します。if ステートメントに入れたときに、オブジェクトがデフォルトで false を返すようにすることは可能ですか? 私が欲しいもの:

$dog = new DogObject();
if($dog)
{
   return "This is bad;"
}
else
{
   return "Excellent!  $dog was false!"
}

これが可能な方法はありますか?完全に必要というわけではありませんが、数行のコードを節約できます。ありがとう!

4

11 に答える 11

3

いいえ、PHP は演算子のオーバーロードをサポートしていません。将来のバージョンで追加されるかもしれません。

于 2009-07-25T19:02:32.370 に答える
2

instanceof キーワードを使用します。

例えば

$result = Users->insertNewUser();

if($result instanceof MyErrorClass){
  (CHECK WHAT WENT WRONG AND SAY WHY)
} else {
  //Go on about our business because everything worked.
}

情報はこちら。

于 2009-07-25T19:15:02.987 に答える
1

私はこれを自分でやろうとしていて、うまくいくように見える解決策を見つけました。

質問者に別の解決策を使用するように言って質問に答えようとしていた他の人たちに応えて、私は質問の理由も説明しようとします。元の投稿者も私も例外を使用したくないのは、例外処理機能を使用せず、このクラスを使用するコードにその負担をかけるためです。少なくとも私にとっては、これを使用できるようにすることが重要でした。非オブジェクト指向または非例外ベースのスタイルで記述される可能性のある他のPHPコードでシームレスにクラス化されます。多くの組み込みPHP関数は、失敗したプロセスに対してfalseの結果が望ましいように記述されています。同時に、このオブジェクトを独自のコードで特別な方法で処理できるようにしたい場合があります。

たとえば、次のようなことをしたいと思うかもしれません。

if ( !($goodObject = ObjectFactory::getObject($objectType)) ) {
  // if $objectType was not something ObjectFactory could handle, it
  // might return a Special Case object such as FalseObject below
  // (see Patterns of Enterprise Application Architecture)
  // in order to indicate something went wrong.
  // (Because it is easy to do it this way.)
  //
  // FalseObject could have methods for displaying error information.
}

これは非常に単純な実装です。

class FalseObject {
  public function __toString() {
    // return an empty string that in PHP evaluates to false
    return '';
  }
}

$false = new FalseObject();

if ( $false ) {
  print $false . ' is false.';
} else {
  print $false . ' is true.';
}

print '<br />';

if ( !$false ) {
  print $false . ' is really true.';
} else {
  print $false . ' is really false.';
}

//予期しないことが起こっていないことを確認するために、$falseを出力しています。

出力は次のとおりです。

は偽です。本当に間違っています。

私はこれをテストしましたが、クラス内に次のような宣言された変数がある場合でも機能します。

class FalseObject {
  const flag = true;
  public $message = 'a message';
  public function __toString() {
    return '';
  }
}

もう少し興味深い実装は次のとおりです。

class FalseException extends Exception {
  final public function __toString() {
    return '';
  }
}

class CustomException extends FalseException { }

$false = new CustomException('Something went wrong.');

以前と同じテストコードを使用すると、$falseはfalseと評価されます。

于 2009-08-16T02:07:15.820 に答える
1

最近、null オブジェクト パターンを使用して、似たようなことをしなければなりませんでした。残念ながら、null オブジェクトは true を返し、問題の変数は (関数のデフォルト パラメータからの) 実際の null 値である場合がありました。私が思いついた最良の方法は if((string)$var) { でしたが、これは空の配列では機能しません。

于 2010-07-14T10:29:30.797 に答える
0

「ifステートメント」に何かを入れることは、そこで変数をブール値として評価するだけです。

あなたの例では、 $dog は、それが機能するために常にfalse である必要があります。変数がいつブール式で評価されようとしているのかを知る方法はありません。

ここでのあなたの最終的な目的は何ですか?保存しようとしているコードの行は何ですか?

于 2009-07-25T18:42:01.837 に答える
0

オブジェクト自体についてはわかりません。可能。パブリック プロパティを DogObject クラスに追加し、デフォルトで false に設定するなどの方法を試すことができます。そのような。

class DogObject
{
    var $isValid = false;

    public function IsValid()
    {
        return $isValid;
    }
}

そして、それをインスタンス化すると、デフォルトで false になります。

$dog = new DogObject();
if($dog->IsValid())
{
   return "This is bad;"
}
else
{
   return "Excellent!  $dog was false!"
}

ちょっとした考え。

于 2009-07-25T18:43:00.943 に答える
0

あなたが何を求めているのか理解できたら、あなたはこれをしたいと思います:

if (!$dog){
     return "$dog was false";
}

!ないことを意味します。「犬でない場合、または犬が真実でない場合」と読むことができます

于 2009-07-25T18:43:19.493 に答える
0

if($dog)どのような条件下で false と評価したいですか? 文字通り要求したことを実行することはできませんが、おそらく条件付けられたものは、あなたが望むことを行うものに置き換えることができます.

于 2009-07-25T18:44:57.507 に答える
0
class UserController
{
  public function newuserAction()
  {
    $userModel = new UserModel();
    if ($userModel->insertUser()) {
      // Success!
    } else {
      die($userModel->getError());
    }
  }
}

または

class UserController
{
  public function newuserAction()
  {
    $userModel = new UserModel();
    try {
      $userModel->insertUser()
    }
    catch (Exception $e) {
      die($e);
    }
  }
}

エラーを処理する方法は無数にあります。それはすべて、エラーの複雑さと回復オプションの量によって異なります。

于 2009-07-25T19:07:47.960 に答える