1

クラス インスタンスで発行された if ステートメントのブール値の戻り値を定義する方法はありますか? 配列アクセス インターフェイスなどを実装するクラスがありますが、ラップされた配列が空の場合でも:

if($class)

オブジェクトであり、存在するため、常に true を返します。毎回発行する必要はありません。

if(count($class))

これを達成する方法はありますか?

4

4 に答える 4

2

要点が分かったら、カウント可能なインターフェイスを実装できます。これには、メソッドを定義する必要があります。メソッドを使用すると、内部配列にアイテムがあるかどうか、または定義したいロジックがないかどうか count()がわかります。count($myArrayAccessInstance)

class MyAy implements ArrayAccess, Countable
{
    private $data;

    public function offsetExists($key)
    {
         # code...
    }

    public function offsetUnset($key)
    {
         # code...
    }

    public function offsetGet($key)
    {
        # code...
    }

    public function offsetSet($key, $value)
    {
        $this->data[$key] = $key;
    }

    public function count()
    {
        return $this->data > 0;
    }
}

$my = new MyAy();

$my['user'] = "Ilpaijin";

if(count($my))
{
    var_dump($my);
}
于 2014-08-03T13:53:02.173 に答える
1

常に true を返すため、オブジェクトをクラス内のプロパティに関連するブール値にキャストすることはできません。しかし、このように必要なブール値を返すことができる関数をクラス内に作成するだけでよいと思います

public function bool()
{
    return (count($this->array)>0);
}

使用する必要がある場合は、このように関数を呼び出すだけで、if ($obj->bool()) { ... }ステートメントを最初にやりたかったように見せる別の方法は、非常に短い名前でクラスを定義することです。私は通常、 を使用します_。この関数は返す必要がありますこのように必要なブール値

function _ ($Obj)
{
    return $Obj->bool();
}

最後に、このようにクラスをテストする代わりに($class->bool())、少し長い場合は、このようにします

if (_($class))
{ /* do something fun */ }
于 2014-08-03T13:24:16.867 に答える
1

クラスを実装しているとすれば、配列内の要素を数えるメンバーを持つことができるでしょうか? 何かのようなもの:

class MyClass {

    public $numElems = 0;
    private $elems = array();

    ...

    public function add($elem)  {
        $elems[] = $elem;
        $numElems++;
    }

    ...
}

そして、次のifようにします if($class->numElems) ...

于 2014-08-03T13:08:45.657 に答える
1

不可能です

In PHP an object when cast to bool always produces true. There is no way of changing that.

ここで答えをチェック

于 2014-08-03T13:10:37.317 に答える