Métodos Getters e Setters [duplicada] – php orientação-a-objetos getters-setters

Pergunta:


Esta pergunta já tem uma resposta aqui:

No meu curso, estou aprendendo getters que pega “dados” e setters, que insere/modifica.

Fiz meu código assim pra classe caneta:

<?php

class Caneta {
    public $modelo;
    private $ponta;

public function getModelo(){
    return $this->modelo;
}
public function setModelo($m){
    $this->modelo = $m;
}
public function getPonta(){
    return $this->ponta;
}
public function setPonta($p) {
    $this->ponta = $p;
}

}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Aula 02 POO</title>
    </head>
    <body>
        <pre>
        <?php
            require_once 'Caneta.php';
            $c1 = new Caneta;
            $c1->setModelo("BIC");
            $c1->setPonta(0.5);
            print("Eu tenho uma caneta {$c1->getModelo()} com a ponta {$c1->getPonta()}");
        ?>
        </pre>
</body>
</html>

No caso aquelas palavrinhas ali, set e get, eu poderia trocar por qualquer outra? Por exemplo (somente dúvida), poderia fazer assim?

<?php

class Caneta {
    public $modelo;
    private $ponta;

public function puxarModelo(){
    return $this->modelo;
}
public function inserirModelo($m){
    $this->modelo = $m;
}
public function puxarPonta(){
    return $this->ponta;
}
public function inserirPonta($p) {
    $this->ponta = $p;
}

}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Aula 02 POO</title>
    </head>
    <body>
        <pre>
        <?php
            require_once 'Caneta.php';
            $c1 = new Caneta;
            $c1->inserirModelo("BIC");
            $c1->inserirPonta(0.5);
            print("Eu tenho uma caneta {$c1->puxarModelo()} com a ponta {$c1->puxarPonta()}");
        ?>
        </pre>
</body>
</html>

Estou aprendendo com get e set, mas queria saber se isso é padrão/obrigatório, ou, se eu posso mudar (se eu quiser) sem problemas?

Autor da pergunta Lucas Carvalho

Resposta Maniero:

Não é obrigatório. De fato em PHP quase sempre é um canhão pra matar passarinho. Na maioria das situações, dada a natureza de script do PHP, há pouco ou zero ganho em usar este tipo de coisa, a não ser que o método faça alguma útil. Se a pessoa ficou com inveja de programar em Java usando o PHP, então passa para o Java. Ou pelo menos vá para Hack que são linguagens enterprise. Esta é uma técnica inadequada para scripts.

Na verdade eu prefiro o uso de propriedades getter/setter, sempre que possível, assim mantêm-se a sintaxe de atributo público adicionando comportamento ao acesso ao atributo: Quando usar método mágico __contructor ou set e get.

Já há uma comparação das duas formas.

Veja Deveriamos utilizar todas variáveis como privadas?.

Sempre que for usar alguma coisa, deve-se perguntar qual a vantagem de adotar aquele design. Se não souber responder ou se não souber porque naquele contexto, simplesmente não use. Se não puder dizer quais as desvantagens, também estará correndo risco de usar algo que causará problema no futuro. Usar porque todo mundo está fazendo não é uma boa ideia. Já havia a expressão “se todo mundo está jogando em um abismo, você se joga também?”.

Se usar onde não precisa ou não souber porque está usando complicará a vida do programador no futuro.

Algumas pessoas até dizem que nunca deveria fazer desta forma. Então para estas pessoas não usar as palavras get e set pode ser uma boa. Dizem que voê só deve criar métodos que façam alguma coisa útil e que este par de métodos apenas encapsulando um atributo não deve ser criado nunca.

Note que essas pessoas não pregam o uso de atributos públicos, apenas que todos métodos devem ter função específica. Em geral isso costuma ser exagero e pode dificultar certos padrões.

O que eu estou dizendo é que em script, o uso de atributos públicos não é tão complicado assim, principalmente se tiver interesse em usar os métodos mágicos que quase nenhum programador PHP, apesar de ser um método mais adequado. Talvez por ele não ter sido bem implementado na linguagem, talvez porque desconhecem o recurso, talvez porque gostam do estilo do Java.

Tem várias perguntas sobre o assunto:

Os métodos getters e setters são métodos para acessar e modificar informações de classes que possuem encapsulamento. Você pode colocar o nome que quiser na função, mas isso já um padrão estabelecido, se você fugir a regra, estará complicando a vida do futuro programador que venha dar manutenção em seu código.

Fonte

Related Posts:

Qual a diferença entre AppCompatActivity e Activity? – android android-activity
Pergunta: Qual a diferença da AppCompatActivity para Activity ? A partir de qual versão a AppCompatActivity foi adicionada ao Android? Autor da pergunta Luhhh A diferença reside ...
Como abreviar palavras em PHP? – php string
Pergunta: Possuo informações comuns como nome de pessoas e endereços, e preciso que elas contenham no máximo 30 caracteres sem cortar palavras. Exemplo: 'Avenida Natalino João Brescansin' ...
Qual é a finalidade de um parêntese vazio numa declaração Lambda? – c# expressões-lambda característica-linguagem
Pergunta: Criei um exemplo de uma declaração Lambda sem argumentos, entretanto, estou com duvidas referente a omissão do parêntese vazio () na declaração. Veja o exemplo: class ...
Boas práticas para URI em API RESTful – api rest restful
Pergunta: Estou com dúvida em relação às URIs de alguns recursos da api que estou desenvolvendo. Tenho os recursos projetos e atividades com relação 1-N, ...
Dúvidas sobre a integração do MySQL com Java – java mysql netbeans
Pergunta: Estou criando um sistema no NetBeans, utilizando a linguagem Java e o banco de dados MySQL. Escrevi o seguinte código para realizar a conexão ...
Qual é a finalidade da pasta Model do framework Inphinit? – php inphinit
Pergunta: No Inphinit micro-framework existe a pasta Model que fica dentro da pasta application, e nela é onde ficam as classes, mas eu estou muito ...
Uso do ‘@’ em variáveis – javascript typescript coffeescript
Pergunta: Vejo em algumas linguagens que compilam para javascript, como TypeScript e CoffeeScript, o uso do @ em variáveis, como também, casos em que o ...
Qual tamanho máximo um arquivo JSON pode ter? – json arquivo
Pergunta: Vou dar um exemplo para conseguir explicar minha duvida: Preciso recuperar informação de imagens vindas de uma API, esse banco de imagens me retorna JSON's ...
O que é Teste de Regressão? – terminologia engenharia-de-software testes
Pergunta: Na matéria de Teste de Software o professor abordou um termo chamado Teste de Regressão, isto dentro da disciplina de teste de software. Sendo ...
O que é um construtor da linguagem? – php característica-linguagem
Pergunta: Em PHP, já li e ouvi várias vezes a respeito dos Construtores da Linguagem. Os casos que sempre ouvi falar deles foi em casos ...
Função intrínseca para converter numérico para string – cobol
Pergunta: Estou a tentar saber se existe alguma função intrínseca do COBOL para converter um data numérico para string sem precisar usar a cláusula REDEFINES: ( ...
Porque usar implements? – java android
Pergunta: Qual a diferença entre usar btn.setOnClickListener(new OnClickListener() { e public class MainActivity extends Activity implements OnClickListener{ Estive fazendo um curso de Android e meu professor falou que ...
O que é XHTML e quando deve ser usado? – html xml xhtml
Pergunta: O que eu sei é que o XHTML precisa ser XML válido. Isso implica, por exemplo, que todas as tags precisam ser fechadas. Por ...
Uma placa aceleradora de vídeo pode melhorar o desempenho não-gráfico? [fechada] – desempenho
Pergunta: Para desenvolver em Ruby on Rails, eu utilizo aqui uma máquina virtual do VirtualBox com Ubuntu Server 14.04 sem interface gráfica instalada. Recentemente descobri uma ...
Concat() VS Union() – c# .net
Pergunta: Qual a diferença entre Concat() e Union() ? Quando usar Concat() e quando usar Union() ? Somente pode ser usado em list ? ...

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *