PHP에서 객체가 비어 있는지 확인하는 방법은 무엇입니까?
PHP에서 객체가 비어 있는지 여부를 찾는 방법.
다음은 $obj
XML 데이터를 보유 하는 코드입니다 . 비어 있는지 여부를 어떻게 확인할 수 있습니까?
내 코드 :
$obj = simplexml_load_file($url);
배열로 캐스팅 한 다음 비어 있는지 여부를 확인할 수 있습니다.
$arr = (array)$obj;
if (empty($arr)) {
// do stuff
}
편집 : PHP 5.4에서는 아래와 같이 한 줄 형변환이 작동하지 않습니다.
if (empty((array) $obj)) {
//do stuff
}
편집 : 나는 그들이 SimpleXMLElement 객체가 비어 있는지 구체적으로 확인하고 싶어한다는 것을 깨닫지 못했습니다. 아래에 이전 답변을 남겼습니다.
업데이트 된 답변 (SimpleXMLElement) :
SimpleXMLElement의 경우 :
비어 있으면 속성이 없음을 의미합니다.
$obj = simplexml_load_file($url);
if ( !$obj->count() )
{
// no properties
}
또는
$obj = simplexml_load_file($url);
if ( !(array)$obj )
{
// empty array
}
SimpleXMLElement가 한 수준 깊이이고 비어 있으면 실제로 PHP가 거짓 (또는 속성 없음)으로 간주하는 속성 만 있음을 의미합니다 .
$obj = simplexml_load_file($url);
if ( !array_filter((array)$obj) )
{
// all properties falsey or no properties at all
}
SimpleXMLElement가 한 수준 이상인 경우 순수한 배열로 변환하여 시작할 수 있습니다.
$obj = simplexml_load_file($url);
// `json_decode(json_encode($obj), TRUE)` can be slow because
// you're converting to and from a JSON string.
// I don't know another simple way to do a deep conversion from object to array
$array = json_decode(json_encode($obj), TRUE);
if ( !array_filter($array) )
{
// empty or all properties falsey
}
이전 답변 (단순 개체) :
단순 객체 (유형 stdClass
)가 완전히 비어 있는지 (키 / 값 없음) 확인하려면 다음을 수행 할 수 있습니다.
// $obj is type stdClass and we want to check if it's empty
if ( $obj == new stdClass() )
{
echo "Object is empty"; // JSON: {}
}
else
{
echo "Object has properties";
}
출처 : http://php.net/manual/en/language.oop5.object-comparison.php
편집 : 추가 된 예
$one = new stdClass();
$two = (object)array();
var_dump($one == new stdClass()); // TRUE
var_dump($two == new stdClass()); // TRUE
var_dump($one == $two); // TRUE
$two->test = TRUE;
var_dump($two == new stdClass()); // FALSE
var_dump($one == $two); // FALSE
$two->test = FALSE;
var_dump($one == $two); // FALSE
$two->test = NULL;
var_dump($one == $two); // FALSE
$two->test = TRUE;
$one->test = TRUE;
var_dump($one == $two); // TRUE
unset($one->test, $two->test);
var_dump($one == $two); // TRUE
객체를 배열로 캐스트하고 다음과 같이 개수를 테스트 할 수 있습니다.
if(count((array)$obj)) {
// doStuff
}
객체가 비어 있지 않고 상당히 크지 않은 경우 배열 또는 직렬화에 리소스를 낭비하는 이유는 무엇입니까?
이것은 JavaScript에서 사용하는 매우 쉬운 솔루션입니다. 객체를 배열로 캐스트하고 비어 있는지 확인하거나 JSON으로 인코딩하는 언급 된 솔루션과 달리이 간단한 함수는 간단한 작업을 수행하는 데 사용되는 리소스와 관련하여 매우 효율적입니다.
function emptyObj( $obj ) {
foreach ( $obj AS $prop ) {
return FALSE;
}
return TRUE;
}
The solution works in a very simple manner: It wont enter a foreach loop at all if the object is empty and it will return true
. If it's not empty it will enter the foreach
loop and return false
right away, not passing through the whole set.
Another possible solution which doesn't need casting to array
:
// test setup
class X { private $p = 1; } // private fields only => empty
$obj = new X;
// $obj->x = 1;
// test wrapped into a function
function object_empty( $obj ){
foreach( $obj as $x ) return false;
return true;
}
// inline test
$object_empty = true;
foreach( $obj as $object_empty ){ // value ignored ...
$object_empty = false; // ... because we set it false
break;
}
// test
var_dump( $object_empty, object_empty( $obj ) );
Using empty()
won't work as usual when using it on an object, because the __isset()
overloading method will be called instead, if declared.
Therefore you can use count()
(if the object is Countable).
Or by using get_object_vars()
, e.g.
get_object_vars($obj) ? TRUE : FALSE;
there's no unique safe way to check if an object is empty
php's count() first casts to array, but casting can produce an empty array, depends by how the object is implemented (extensions' objects are often affected by those issues)
in your case you have to use $obj->count();
http://it.php.net/manual/en/simplexmlelement.count.php
(that is not php's count http://www.php.net/count )
If you cast anything in PHP as a (bool), it will tell you right away if the item is an object, primitive type or null. Use the following code:
$obj = simplexml_load_file($url);
if (!(bool)$obj) {
print "This variable is null, 0 or empty";
} else {
print "Variable is an object or a primitive type!";
}
If an object is "empty" or not is a matter of definition, and because it depends on the nature of the object the class represents, it is for the class to define.
PHP itself regards every instance of a class as not empty.
class Test { }
$t = new Test();
var_dump(empty($t));
// results in bool(false)
There cannot be a generic definition for an "empty" object. You might argue in the above example the result of empty()
should be true
, because the object does not represent any content. But how is PHP to know? Some objects are never meant to represent content (think factories for instance), others always represent a meaningful value (think new DateTime()
).
In short, you will have to come up with your own criteria for a specific object, and test them accordingly, either from outside the object or from a self-written isEmpty()
method in the object.
$array = array_filter($array);
if(!empty($array)) {
echo "not empty";
}
or
if(count($array) > 0) {
echo 'Error';
} else {
echo 'No Error';
}
I was using a json_decode of a string in post request. None of the above worked for me, in the end I used this:
$post_vals = json_decode($_POST['stuff']);
if(json_encode($post_vals->object) != '{}')
{
// its not empty
}
참고URL : https://stackoverflow.com/questions/9412126/how-to-check-that-an-object-is-empty-in-php
'developer tip' 카테고리의 다른 글
describeContents ()가 언제 어디서 사용됩니까? (0) | 2020.09.05 |
---|---|
유닉스에서 타임 스탬프에 따라 파일을 정렬하는 방법은 무엇입니까? (0) | 2020.09.05 |
IIS7 캐시 제어 (0) | 2020.09.04 |
BeautifulSoup에서 xpath를 사용할 수 있습니까? (0) | 2020.09.04 |
ASP.NET : HTTP 오류 500.19 – 내부 서버 오류 0x8007000d (0) | 2020.09.04 |