@Kerm

Как объявить о том что переменная в классе является объектом?

Накопилось несколько нубских вопросов, хотелось бы для понимания знать на них ответ.

1) В классе когда указываем сверху список всех доступных переменных с их значениями по умолчанию и их область видимости, для переменной можно указать вот так: public $a = array() или private $b = "", хотел бы знать если в переменной будет передаваться объект другого класса, что для этой переменной можно указать в качестве значения по умолчанию помимо ""?

2) Когда передаем в функцию переменные для них можно указать их тип для валидации:

public function __construct(int $is_preview = 0, int $w_id = 0, array $sh_store, array $prod_gr, $type = 'prod', array $path_ls, $user, $site_sn) {}


Я имею ввиду int, array. А есть ли что то для валидации объекта? Не знаю можно ли написано просто object рядом с переменной или надо писать что то другое?

PHP 7
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 2
Konata69lol
@Konata69lol
backend developer (php/go)
1. Зачем вам вообще значения по умолчанию? Пусть их конструктор инициализирует.
Если хотите сделать себе подсказку, в каком поле какой тип - используйте док блоки
Поддержку типов в полях объекта завезут в php 7.4 к концу года

2. Для валидации (точнее это type hint) в методе используйте класс, абстрактный класс или интерфейс
Ответ написан
Комментировать
php666
@php666
PHP-макака
public function __construct(int $is_preview = 0, int $w_id = 0, array $sh_store, array $prod_gr, $type = 'prod', array $path_ls, $user, $site_sn) {}

НИКОГДА так не пиши
не надо в конструктор ничего пихать - не путай класс с функцией
объект - это механизм, позволяющий изменять данные сущности в любой момент. Учи ООП.
следовательно, делаем -set -get методы и наслаждаемся красотой:

<?php
class foo
{
    /**
     * @var int
     */
    protected $is_preview = 0;

    /**
     * @var int
     */
    protected $w_id = 0;

    /**
     * @var array
     */
    protected $sh_store = [];

    /**
     * @var array
     */
    protected $prod_gr = [];

    /**
     * @var string
     */
    protected $type = 'prod';

    /**
     * @var array
     */
    protected $path_ls = [];

    /**
     * @var User
     */
    protected $user;

    protected $site_sn;

    public function __construct()
    {

    }

    /**
     * @return int
     */
    public function getisPreview(): int
    {
        return $this->is_preview;
    }

    /**
     * @param int $is_preview
     */
    public function setIsPreview(int $is_preview)
    {
        $this->is_preview = $is_preview;

        return $this;
    }

    /**
     * @return int
     */
    public function getWId(): int
    {
        return $this->w_id;
    }

    /**
     * @param int $w_id
     */
    public function setWId(int $w_id)
    {
        $this->w_id = $w_id;

        return $this;
    }

    /**
     * @return array
     */
    public function getShStore(): array
    {
        return $this->sh_store;
    }

    /**
     * @param array $sh_store
     */
    public function setShStore(array $sh_store)
    {
        $this->sh_store = $sh_store;

        return $this;
    }

    /**
     * @return array
     */
    public function getProdGr(): array
    {
        return $this->prod_gr;
    }

    /**
     * @param array $prod_gr
     */
    public function setProdGr(array $prod_gr)
    {
        $this->prod_gr = $prod_gr;

        return $this;
    }

    /**
     * @return string
     */
    public function getType(): string
    {
        return $this->type;
    }

    /**
     * @param string $type
     */
    public function setType(string $type)
    {
        $this->type = $type;

        return $this;
    }

    /**
     * @return array
     */
    public function getPathLs(): array
    {
        return $this->path_ls;
    }

    /**
     * @param array $path_ls
     */
    public function setPathLs(array $path_ls)
    {
        $this->path_ls = $path_ls;

        return $this;
    }

    /**
     * @return User
     */
    public function getUser(): User
    {
        return $this->user;
    }

    /**
     * @param User $user
     */
    public function setUser(User $user)
    {
        $this->user = $user;

        return $this;
    }

    /**
     * @return mixed
     */
    public function getSiteSn()
    {
        return $this->site_sn;
    }

    /**
     * @param mixed $site_sn
     */
    public function setSiteSn($site_sn)
    {
        $this->site_sn = $site_sn;

        return $this;
    }
}

$obj = (new foo())
            ->setType('type')
            ->setPathLs(123)
            ->setProdGr(1)
            ->setWId(12)
            ->setUser(new User());


И что за имена proв_gr, w_id и тд? Гадалкой надо быть? Правильно именуй. На читай.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
25 апр. 2024, в 19:42
49000 руб./за проект
25 апр. 2024, в 19:41
2000 руб./за проект
25 апр. 2024, в 19:22
18000 руб./за проект