За последние 24 часа нас посетили 22954 программиста и 1234 робота. Сейчас ищут 708 программистов ...

Использовать empty/isset не к объекту, а к его свойству.

Тема в разделе "PHP для новичков", создана пользователем rugleb, 10 дек 2017.

Метки:
  1. rugleb

    rugleb Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    25
    Симпатии:
    0
    Есть класс:
    PHP:
    1. class MyClass
    2. {
    3.     protected $_items = [];
    4.  
    5.     public function __construct()
    6.     {
    7.         // ...
    8.     }
    9.  
    10.     // ...
    11. }
    Возможно ли сделать так, чтобы при обращении к объекту таким образом:
    PHP:
    1. $obj = new MyClass();
    2.  
    3. if (! empty($obj)) { /* ... */ }
    4. if (! isset($obj)) { /* ... */ }
    5. if (! $obj) { /* ... */ }
    Проверялся не сам объет, а свойство $_items?
    Магические методы не помогают, насколько я внимательно читал документацию, интересно возможно ли это в принципе. Верия PHP 7.0 (и младше).
     
  2. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    В объекте ссылка на свойство, а свойство же можно проверить в классе или как аргумент объекта.
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. error_reporting ( E_ALL );
    4.  
    5. final class A
    6. {
    7.     protected $item = 1;
    8.    
    9.     public function __isset( $name )
    10.     {
    11.         var_dump ( 'isset' );
    12.         return isset ( $this -> {$name} );
    13.     }
    14. }
    15.  
    16. $a = new A;
    17.  
    18. echo isset ( $a -> item ) ? 1111 : 9;
    Код (Text):
    1. string(5) "isset"
    2. 1111
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Вот конкретно так - не возможно. Возможно как @MouseZver написал
     
  5. rugleb

    rugleb Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    25
    Симпатии:
    0
    А надо конкретно так.
    Ну раз нет, значит нет)