За последние 24 часа нас посетили 14933 программиста и 1730 роботов. Сейчас ищут 555 программистов ...

Как проверить пустой объект или нет?

Тема в разделе "PHP для новичков", создана пользователем thislegion, 20 янв 2024.

  1. thislegion

    thislegion Новичок

    С нами с:
    12 май 2022
    Сообщения:
    16
    Симпатии:
    0
    Подскажите почему в данном случае условие показывает что объект непустой? И как проверять объект на пустоту?

    PHP:
    1. $a = (object)[];
    2.  
    3. // вывод: no, хотя объект пустой
    4. if( empty($a) ){
    5.     echo 'yes';  
    6. } else{
    7.     echo 'no';
    8. }
     
  2. Dremax

    Dremax Активный пользователь

    С нами с:
    13 фев 2015
    Сообщения:
    154
    Симпатии:
    4
    Протестируй,выведи $a,проверь че там

    Код (Text):
    1. $a = (object)[];
    2. // вывод: no, хотя объект пустой
    3. if( empty($a) ){
    4.     echo '$a = '.$a;
    5. } else{
    6.     echo 'no';
    7. }
     
  3. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    429
    Симпатии:
    80
    Адрес:
    Бавария, Германия
    PHP:
    1. <?
    2. $a = (object)[];
    3. // вывод: yes, объект пустой
    4. if(count((array)$a))
    5. {
    6.   echo 'no';
    7. }
    8. else
    9. {
    10.   echo 'yes';
    11. }
    12. ###  или так  ####
    13. // вывод: yes, объект пустой
    14. if ($a == new stdClass())
    15. {
    16.   echo "yes";
    17. }
    18. else
    19. {
    20.   echo "no";
    21. }
    22. ?>
     
  4. Dremax

    Dremax Активный пользователь

    С нами с:
    13 фев 2015
    Сообщения:
    154
    Симпатии:
    4
    Скорее всего $a существует,но = пустое место
    Я давно про эти косяки знаю,и пишу так:
    PHP:
    1. $a = (object)[];
    2. // вывод: no, хотя объект пустой
    3. if( $a>' ' ){
    4.     echo 'yes';
    5. } else if($a<' ' || !$a) {
    6.     echo 'no';
    7. }
    Но я не профессионал,я самоучка
     
  5. Survivor

    Survivor Новичок

    С нами с:
    8 фев 2023
    Сообщения:
    87
    Симпатии:
    17
    преобразуй в массив например
    PHP:
    1. $a = (object)[];
    2. if (count((array)$a) > 0) {
    3.     echo 'не пусто';
    4. } else {
    5.     echo 'пусто;
    6. }
    или проверь конкретное свойство объекта

    PHP:
    1. $a = (object)[];
    2. if (property_exists($a, 'НАЗВАНИЕ')) {
    3.     echo 'не пусто';
    4. } else {
    5.     echo 'пусто';
    6. }
    ну и вообще перед проверкой var_dump($a) шо там?
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.793
    Симпатии:
    1.330
    Адрес:
    Лень
    если класс имеет экземпляр stdClass, то проверить можно с помощью get_object_vars.
    Но если экземпляр класса имеет приватные свойства, то никак.
     
  7. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    429
    Симпатии:
    80
    Адрес:
    Бавария, Германия
    Согласен с Вами. Только вопрос был о $a = (object)[];
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.793
    Симпатии:
    1.330
    Адрес:
    Лень
    Вопрос был изначально не о "...", а как проверить объект на пустоту. Исходя из не знаний, прокомментирую более детально, что данная конструкция создает экземпляр класса stdClass. Как узнать, тут уже сам, т.к. это тривиальный момент. Этот класс, насколько я лично знаю, может иметь только публичные свойства. Следовательно, мы можем посчитать сколько у него этих свойств. А чтобы проверить эти свойства, каждые, можно воспользоваться функцией с некой логикой:
    PHP:
    1. // result array 1, true
    2. array_diff ( [ 1, 0, false, true, null ], [ null, 0 ] )
    Проверять сам объект с помощью конструкции empty или каким-либо другим подобным методом, неверно. Сам объект и есть "тело". Если зайти еще дальше, то вопрос "как проверить объект пустой или нет?" некорректен.

    Далее, выше описанное не имеет никакого отношения к анонимным, closure экземплярам. У них совсем другая вселенная.
     
  9. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    914
    Симпатии:
    143
    @thislegion, опиши, пожалуйста, цель проверки, не исключено, что что-то пошло не так.
     
  10. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    285
    Симпатии:
    21
    Потому что empty свой аргумент приводит к типу boolean, и обьекты по умолчанию приводятся к true, если у них это не переопределено.