@RuComMarket
Битрикс FullStack разработчик

Как из конструктора класса вернуть массив?

из файла 1.php объявляю класс
include_once('2.php');
$result = new class1();
print_r($result);

в файле 2.php имеется класс с конструктором
class class1 {
    public function __construct() {
        $res['1']='1';
        $res['2']='2';
        return($res);
    }
}

в таком варианте итог вывода файла 1 пустой объект.
через куча разных попыток получился результат:
файл 1.php
include_once('2.php');
$result = new class1();
print_r($result->result());

файл 2.php
class class1 {
    private $res;
    function __construct() {
        $this->$res['1']='1';
        $this->$res['2']='2';
    }
    public function result() {
        return($this->$res);
    }
}

в таком варианте в итоге массив возвращается, но при этом на каждую строчку где присутствует $this->$res выдается ошибка о том, что переменная res не объявлена.
как сделать правильно что бы и массив передавался, желательно сразу с конструктора, и ошибок не возникало?
  • Вопрос задан
  • 341 просмотр
Пригласить эксперта
Ответы на вопрос 3
@f_u_s_s
Любопытный кодер
Не уверен, но попробуйте вот так:
class class1 {
    private $res;
    public function __construct() {
        $this->res[] = '1';
        $this->res[] = '2';
        return($this->res);
    }
}


а во втором файле:
$result = new class1();
print_r($result);


А ошибки у вас во втором случае возникают из-за конструкции:
$this->$res - замените ее как в моем примере выше на $this->res
Ответ написан
qonand
@qonand
Software Engineer
Само по себе наличие классов еще не означает что Вы применяете ООП-подход. Ваш код как и сам вопрос говорит о полном не понимании ООП-парадигмы. Поэтому лучше разберитесь с ней, почитайте соответствующие статьи/книги, вместо того что бы "с ходу" писать кучу подобного кода. Не хотите разбираться - тогда вообще не стоит строить проект на объектах и всем что с ними связано
Ответ написан
Комментировать
AK-VoronM
@AK-VoronM
"Мало-мало программист"
Не смог пройти мимо. Жесть же, коллеги )))

Если очень хочется классов и получать данные одним вызовом используйте статические методы.

class MyClass
{
    //Публичный метод для получения данных
    public static function getSomeData()
    {
        $result = self::someAction();
        
        return $result;
    }
    
    //Скрытый служебный метод
    protected static function someAction($data = null)
    {
        //Тут что-то делаем
        return $result;
    }
}

$result = MyClass::getSomeData(); //Так получаем данные. Без фанатизма с конструктором.


Не надо жести, потомки вас не простят ))))

Рекомендую почитать на досуге: клац (без рефки).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы