3

次のコード(#1):

var_dump($myObject->getBook()->getCollection());
$testArray=Array();
var_dump($testArray);
var_dump(empty($testArray));

...出力します:

array(0) { } array(0) { } bool(true)

次のコード(#2):

var_dump($myObject->getBook()->getCollection());
$testArray=Array();
var_dump($testArray);
var_dump(empty($myObject->getBook()->getCollection()));

...出力します:

何もない。エラーはありません。1文字ではありません。いいえ、別に。

class Book{
  protected $bidArray=Array();
  public function getCollection(){
    return $this->bidArray;
  }
}

そこで何が起こっているのですか?

4

4 に答える 4

7

empty()関数のように見えますが、関数ではありません。これは、変数でのみ機能する特別な構文ですempty($abc)empty(123)またはなどの式は使用できませんempty($obj->getSth())

于 2012-04-21T14:39:27.217 に答える
3

empty()変数以外では使用できません(つまり、関数呼び出しもありません)。

var_dump(empty($myObject->getBook()->getCollection()));

次のように、エラー表示をオフにする必要があります。

<?php

class Bar {
        function foo() {
        }
}

$B = new Bar();
empty($B->foo());

与える

PHP 致命的なエラー: 9 行目の D:\cw\home\andreas\test\empty.php の書き込みコンテキストでメソッドの戻り値を使用できません

致命的なエラー: Can't use method return value in write context in D:\cw\home\andreas\test\empty.php 行 9

私の地元で。

ini_set('display_errors', true)の前にやってみてvar_dump、エラーメッセージが表示されるかどうかを確認してください

于 2012-04-21T14:40:51.650 に答える
2

php.netのように

empty() は変数のみをチェックします。それ以外の場合は解析エラーが発生します。つまり、次は機能しません: empty(trim($name))。

これはempty()関数ではなく、言語構造であるため、この動作に制限されているためです。

于 2012-04-21T14:40:07.030 に答える
2

empty() を使用すると、メソッドの戻り値に対して直接チェックすることはできません。詳細はこちら:書き込みコンテキストではメソッドの戻り値を使用できません

于 2012-04-21T14:40:17.280 に答える