Как я могу установить значения по умолчанию в конструкторе абстрактного класса? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть абстрактный класс, содержащий такой метод __construct

abstract class Model
{
    protected $attributes = [];

    public function __construct(array $attributes = []) {
        $this->$attributes = $attributes;
    }
}

Затем в моем конкретном классе я расширяю абстрактную модель

class Pong extends Model
{
    
}

Когда я сбрасываю атрибуты внутри constructor Я получаю пустой массив, но если я удалю значение по умолчанию для параметра конструктора, модель Pong будет иметь атрибуты. Проблема в том, что я хочу иметь возможность построить конкретный класс как со значениями по умолчанию, так и без

$pong = new Pong();
$pong = new Pong(['msg' => 'Hello Kitty']);

1 Ответ

0 голосов
/ 13 июля 2020

Попробуйте:

Я сделал $attributes public, чтобы показать результаты.

Обратите внимание на вопросительные знаки ??.

<?php

class Model
{
    public $attributes = [];

    public function __construct(array $attr = []) {
        $this->attributes['msg'] = $attr['msg'] ?? "default";
        $this->attributes['someValue'] = $attr['someValue'] ?? 'default';
    }
}

class Pong extends Model
{
    
}

$pong = new Pong();
print_r($pong->attributes);

Поиграйте с кодом , который вы видите выше!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...