4
respostas

Array como argumento para uma classe

Boa noite,

Minha classe recebe um array como argumento e quero definir um valor para uma chave específica, mas não sei qual a sintaxe para executar essa tarefa.

O array será recebido pelo objeto através da propriedade $estoque (neste caso específico, é herdado de outra classe).

Abaixo minha classe:

<?php

namespace SistemaLarco\modelo;

use SistemaLarco\modelo\Insumo;

class S10 extends Produto
{
    private $insumo;
    public function __construct(array $estoque, float $percentualComposicao, Insumo $insumo)
    {
        parent::__construct($estoque, $percentualComposicao);
        $this->insumo = $insumo;
    }

    public function venda ($volume)
    {
        $this->estoque[b100] -= ($volume * $this->percentualComposicao);
    }
}
4 respostas

Oi Júlio,

Caso eu tenha entendido corretamente a sua pergunta basta apenas você fazer:

$estoque['alguma_chave'] = 'valor da chave';

Ou seja, pegar a variável que armazena o array e definir uma nova chave. É isso mesmo que você quer?

Oi Diego,

Essa é a forma que eu defino uma posição do array. Até aí tudo bem. Minha dúvida está no caso de uma classe.

Eu defini uma propriedade para minha classe:

$this->estoque = $estoque

Sendo que esse '$estoque' recebido no meu construtor será um array.

Mas eu quero criar um método que define duas posições do array. Como posso fazer isso?

public function define2Valores ()
{
$this->estoque['chave1'] = ???
$this->estoque['chave2']=???
}

Veja se isso esclarece um pouco o que você precisa.

public function construct(array $estoque, float $percentualComposicao, Insumo $insumo) { parent::construct($estoque, $percentualComposicao); $this->insumo = $insumo; $this->estoque = $estoque; }

public function venda ($volume)
{
    $this->estoque[$this->insumo->id]] -= ($volume * $this->percentualComposicao);
}

Sim Júlio, a forma que você define uma posição no array de forma estruturada vale para dentro de uma classe também, só com a diferença que se for um atributo terá que usar o $this.

Você pode criar um método da seguinte forma:

public function adicionaAoEstoque($key, $value): self
{
    if(!isset($this->estoque[$key])){
        $this->estoque[$key] = $value;
    }

    return $this;
}

Você pode então usar da seguinte forma:

    $this->adicionaAoEstoque('produto1', 'esse é o produto 1')
            ->('produto2', 'esse é o produto 2')
            ->('produto3', 'esse é o produto 3');

Essa é apenas uma abordagem, você pode melhorar e adaptar o código para sua necessidade. Qualquer dúvida estou a disposição.