@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
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ответы на вопрос 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 и тд? Гадалкой надо быть? Правильно именуй. На читай.
Ответ написан
Ваш ответ на вопрос

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

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