PHP Orientado a Objetos com Classes e Objetos

Neste artigo, vamos explorar os fundamentos da programação orientada a objetos em PHP. Começaremos com uma introdução a classes e objetos e discutiremos alguns conceitos avançados, como herança e polimorfismo, na segunda metade deste artigo.

O que é Programação Orientada a Objetos (OOP)?

A programação orientada a objetos, comumente referida como OOP, é uma abordagem que ajuda você a desenvolver aplicativos complexos de uma forma que é facilmente mantida e escalável a longo prazo. No mundo da POO, entidades do mundo real, como Person, Carou Animal são tratados como objetos. Na programação orientada a objetos, você interage com seu aplicativo usando objetos. Isso contrasta com a programação procedural, onde você interage principalmente com funções e variáveis ​​globais.

Em OOP, existe um conceito de “classe“, que é usado para modelar ou mapear uma entidade do mundo real para um modelo de dados (propriedades) e funcionalidade (métodos). Um “objeto” é uma instância de uma classe e você pode criar várias instâncias da mesma classe. Por exemplo, há uma única Person classe, mas muitos objetos pessoa podem ser instâncias desta classe—dan, zainab, hectoretc

A classe define propriedades. Por exemplo, para a classe Pessoa, podemos ter name, agee phoneNumber. Então, cada objeto pessoa terá seus próprios valores para essas propriedades.

Você também pode definir métodos na classe que permitem manipular os valores das propriedades do objeto e executar operações nos objetos. Por exemplo, você pode definir um save método que salva as informações do objeto em um banco de dados.

O que é uma classe PHP?

Uma classe é um modelo que representa uma entidade do mundo real e define propriedades e métodos da entidade. Nesta seção, discutiremos a anatomia básica de uma classe PHP típica.

A melhor maneira de entender novos conceitos é com um exemplo. Então vamos dar uma olhada no Employee classe no trecho a seguir, que representa a entidade de funcionário.

o class Employee declaração na primeira linha define o Employee classe. Em seguida, passamos a declarar as propriedades, o construtor e os outros métodos de classe.

Propriedades de classe em PHP

Você pode pensar nas propriedades de classe como variáveis ​​usadas para armazenar informações sobre o objeto. No exemplo acima, definimos três propriedadesfirst_name, last_namee age. Na maioria dos casos, as propriedades de classe são acessadas por meio de objetos instanciados.

Essas propriedades são private, o que significa que eles só podem ser acessados ​​de dentro da classe. Este é o nível de acesso mais seguro para propriedades. Discutiremos os diferentes níveis de acesso para métodos e propriedades de classe posteriormente neste artigo.

Construtores para classes PHP

Um construtor é um método de classe especial que é chamado automaticamente quando você instancia um objeto. Veremos como instanciar objetos nas próximas seções, mas por enquanto você só precisa saber que um construtor é usado para inicializar as propriedades do objeto quando o objeto está sendo criado.

Você pode definir um construtor definindo o __construct método.

Métodos para classes PHP

Podemos pensar em métodos de classe como funções que executam ações específicas associadas a objetos. Na maioria dos casos, eles são usados ​​para acessar e manipular propriedades de objetos e executar operações relacionadas.

No exemplo acima, definimos o getLastName método, que retorna o sobrenome associado ao objeto.

Esta é uma breve introdução à estrutura de classes em PHP. Na próxima seção, veremos como instanciar objetos do Employee classe.

O que é um objeto em PHP?

Na seção anterior, discutimos a estrutura básica de uma classe em PHP. Agora, quando você quiser usar uma classe, você precisa instanciá-la e o resultado final é um objeto. Portanto, podemos pensar em uma classe como um projeto, e um objeto é uma coisa real com a qual você pode trabalhar.

No contexto do Employee classe que acabamos de criar na seção anterior, vamos ver como instanciar um objeto dessa classe.

Você precisa usar o new palavra-chave quando quiser instanciar um objeto de qualquer classe junto com seu nome de classe e obterá uma nova instância de objeto dessa classe.

Se uma classe definiu o __construct método e requer argumentos, você precisa passar esses argumentos ao instanciar um objeto. No nosso caso, o Employee construtor de classe requer três argumentos e, portanto, os passamos quando criamos o $objEmployee objeto. Como discutimos anteriormente, o __construct O método é chamado automaticamente quando o objeto é instanciado.

Em seguida, chamamos os métodos de classe no $objEmployee object para imprimir as informações que foram inicializadas durante a criação do objeto. Claro, você pode criar vários objetos da mesma classe, conforme mostrado no trecho a seguir.

A imagem a seguir é uma representação gráfica da classe Employee e algumas de suas instâncias.

Instanciação de objetoInstanciação de objetoInstanciação de objeto

Simplificando, uma classe é um projeto que você pode usar para criar objetos estruturados.

Encapsulamento

Na seção anterior, discutimos como instanciar objetos do Employee classe. É interessante notar que o $objEmployee O próprio objeto agrupa propriedades e métodos da classe. Em outras palavras, ele oculta esses detalhes do restante do programa. No mundo da OOP, isso é chamado de encapsulamento de dados.

O encapsulamento é um aspecto importante da OOP que permite restringir o acesso a certas propriedades ou métodos do objeto. E isso nos leva a outro tópico para discussão: níveis de acesso.

Níveis de acesso

Ao definir uma propriedade ou um método em uma classe, você pode declará-la para ter um desses três níveis de acessopublic, privateou protected.

Acesso público

Quando você declara uma propriedade ou um método como público, ele pode ser acessado de qualquer lugar fora da classe. O valor de uma propriedade pública pode ser modificado de qualquer lugar em seu código.

Vejamos um exemplo para entender o nível de acesso público.

Como você pode ver no exemplo acima, declaramos o name propriedade seja pública. Portanto, você pode configurá-lo de qualquer lugar fora da classe, como fizemos aqui.

Acesso Privado

Quando você declara uma propriedade ou um método como private, ele só pode ser acessado de dentro da classe. Isso significa que você precisa definir os métodos getter e setter para obter e definir o valor dessa propriedade.

Novamente, vamos revisar o exemplo anterior para entender o nível de acesso privado.

Se você tentar acessar uma propriedade privada de fora da classe, isso lançará o erro fatal Cannot access private property Person::$name. Assim, você precisa definir o valor da propriedade private usando o método setter, como fizemos usando o método setName método.

Existem boas razões pelas quais você pode querer tornar uma propriedade privada. Por exemplo, talvez alguma ação deva ser executada (atualizar um banco de dados, digamos, ou renderizar novamente um modelo) se essa propriedade for alterada. Nesse caso, você pode definir um método setter e manipular qualquer lógica especial quando a propriedade for alterada.

Acesso protegido

Finalmente, quando você declara uma propriedade ou um método como protected, ele pode ser acessado pela mesma classe que o definiu e pelas classes que herdam a classe em questão. Discutiremos a herança na próxima seção, então voltaremos ao nível de acesso protegido um pouco mais tarde.

Herança

A herança é um aspecto importante do paradigma de programação orientada a objetos que permite herdar propriedades e métodos de outras classes estendendo-os. A classe que está sendo herdada é chamada de classe paie a classe que herda a outra classe é chamada de classe infantil. Quando você instancia um objeto da classe filha, ele também herda as propriedades e os métodos da classe pai.

Vamos dar uma olhada na captura de tela a seguir para entender o conceito de herança.

HerançaHerançaHerança

No exemplo acima, o Person class é a classe pai, e o Employee A classe estende ou herda a classe Person e, portanto, é chamada de classe filha.

Vamos tentar passar por um exemplo do mundo real para entender como isso funciona.

O importante a observar aqui é que o Employee classe usou o extends palavra-chave para herdar o Person classe. Agora o Employee classe pode acessar todas as propriedades e métodos do Person classes que são declaradas como públicas ou protegidas. (Ele não pode acessar membros declarados como privados.)

No exemplo acima, o $employee objeto pode acessar getName e setName métodos definidos no Person classe desde que eles são declarados como públicos.

Em seguida, acessamos o callToProtectedNameAndAge método usando o getNameAndAge método definido no Employee classe, uma vez que é declarado como protegido. finalmente, o $employee objeto não pode acessar o callToPrivateNameAndAge método do Person classe desde que é declarado como privado.

Por outro lado, você pode usar o $employee objeto para definir o age propriedade do Person aula, como fizemos no setAge método que é definido no Employee classe, desde o age propriedade é declarada como protegida.

Essa foi uma breve introdução à herança. Ele ajuda a reduzir a duplicação de código e, portanto, incentiva a reutilização de código.

Polimorfismo

O polimorfismo é outro conceito importante no mundo da programação orientada a objetos, que se refere à capacidade de processar objetos de maneira diferente com base em seus tipos de dados.

Por exemplo, no contexto de herança, se a classe filha quiser alterar o comportamento do método da classe pai, ela poderá substituir esse método. Isso é chamado de substituição de método. Vamos examinar rapidamente um exemplo do mundo real para entender o conceito de substituição de método.

Como você pode ver, mudamos o comportamento do formatMessage método substituindo-o no BoldMessage classe. O importante é que uma mensagem seja formatada de forma diferente com base no tipo de objeto, seja uma instância da classe pai ou da classe filha.

(Algumas linguagens orientadas a objetos também têm um tipo de sobrecarga de método que permite definir vários métodos de classe com o mesmo nome, mas um número diferente de argumentos. Isso não é suportado diretamente no PHP, mas há algumas soluções alternativas para obter resultados semelhantes funcionalidade.)

Conclusão

A programação orientada a objetos é um assunto vasto e nós apenas arranhamos a superfície de sua complexidade. Espero que este tutorial tenha ajudado você a começar com os fundamentos da OOP e que isso o motive a continuar e aprender tópicos mais avançados de OOP.

A programação orientada a objetos é um aspecto importante no desenvolvimento de aplicativos, independentemente da tecnologia com a qual você está trabalhando. Hoje, no contexto do PHP, discutimos alguns conceitos básicos de OOP e também aproveitamos a oportunidade para apresentar alguns exemplos do mundo real.

Sinta-se à vontade para postar suas dúvidas usando o feed abaixo!

Deixe uma resposta