A programação orientada a objetos (OOP), um importante paradigma em software, é centrada em “objetos” — instâncias de classes que incluem dados e comportamentos em vez de “ações”.

O PHP, conhecido pela criação de scripts no lado do servidor, se beneficia muito da OOP. Isso ocorre porque a OOP oferece suporte a código modular e reutilizável, facilitando a manutenção. Por sua vez, isso facilita a organização e o dimensionamento de grandes projetos.

Dominar a OOP é importante para desenvolvedores que trabalham com temas, plugins e soluções personalizadas do WordPress. Neste artigo, descreveremos o que é OOP em PHP e o seu impacto no desenvolvimento de WordPress. Também mostraremos a você como implementar os princípios da OOP em PHP.

Pré-requisitos

Para acompanhar as partes práticas deste artigo, certifique-se de ter:

Vantagens da OOP no desenvolvimento em PHP

A OOP impulsiona significativamente o desenvolvimento em PHP, melhorando a modularidade, a reutilização, a escalabilidade, a facilidade de manutenção e o trabalho em equipe. Organiza o código PHP, dividindo-o em objetos, cada um representando uma parte específica do aplicativo. Usando objetos, você pode reutilizar facilmente o código, economizando tempo e reduzindo erros.

Com isso em mente, vamos nos aprofundar em duas vantagens específicas da OOP no PHP, destacando como transforma o processo de desenvolvimento.

1. Reutilização e manutenção de código

A OOP em PHP facilita a reutilização de código devido à herança e ao polimorfismo. As classes podem usar propriedades e métodos de outras classes. Isso permite que você use código antigo de novas maneiras com poucas alterações.

A OOP também torna mais fácil cuidar do código. O encapsulamento significa que os objetos mantêm seus detalhes privados e compartilham apenas o que é necessário, usando métodos especiais chamados getters e setters. Essa abordagem ajuda a evitar que alterações em uma parte do aplicativo causem problemas em outras, tornando o código mais simples de atualizar e manter.

Além disso, visto que os objetos são autossuficientes, torna-se mais simples identificar e corrigir falhas em partes específicas do sistema. Essa característica contribui para aprimorar a qualidade e a confiabilidade do código como um todo.

2. Clareza e estrutura aprimoradas

A OOP torna o código PHP mais limpo e organizado usando classes e objetos. As classes funcionam como templates para os objetos, agrupando em um único lugar todos os elementos que estão relacionados entre si.

A OOP também permite que as classes usem recursos de outras classes, o que significa que você não precisa escrever o mesmo código repetidas vezes. Tudo isso ajuda a tornar o código mais limpo e fácil de corrigir, e bem organizado.

O código limpo da OOP ajuda as equipes a trabalhar melhor em conjunto. É mais fácil para todos entenderem o que o código faz, significando menos tempo explicando tudo e mais tempo fazendo o trabalho. Também reduz os erros, ajudando o projeto a permanecer nos trilhos. E quando o código está arrumado e em ordem, os novos membros da equipe podem se inteirar dele rapidamente.

Implementando a OOP em PHP

Na OOP para PHP, você organiza o código com classes e objetos, como plantas e casas. Você cria classes para tudo (como usuários ou livros), incluindo suas características e ações. Em seguida, você usa a herança para criar novas classes a partir das existentes, economizando tempo ao não repetir o código. E como o encapsulamento mantém privadas algumas partes da classe, seu código fica mais seguro.

As seções a seguir vão orientar você sobre como usar os princípios de OOP de forma eficaz na programação PHP. Criamos um sistema de gerenciamento de conteúdo (CMS) para gerenciar artigos.

1. Defina uma classe com propriedades e métodos

Comece com uma classe Article que inclua propriedades como título, conteúdo e status, além de métodos para definir e exibir essas propriedades.

class Article {
    private $title;
    private $content;
    private $status;

    const STATUS_PUBLISHED = 'published';
    const STATUS_DRAFT = 'draft';

    public function __construct($title, $content) {
        $this->title = $title;
        $this->content = $content;
        $this->status = self::STATUS_DRAFT;
    }

    public function setTitle($title) {
        $this->title = $title;
        return $this;
    }

    public function setContent($content) {
        $this->content = $content;
        return $this;
    }

    public function setStatus($status) {
        $this->status = $status;
        return $this;
    }

    public function display() {
        echo "<h2>{$this->title}</h2><p>{$this->content}</p><strong>Status: {$this->status}</strong>";
    }
}

2. Crie objetos e implemente o encadeamento de métodos

Crie o objeto Article (Artigo) e use o encadeamento de métodos para definir suas propriedades:

$article = new Article("OOP in PHP", "Object-Oriented Programming concepts.");
$article->setTitle("Advanced OOP in PHP")->setContent("Exploring advanced concepts in OOP.")->setStatus(Article::STATUS_PUBLISHED)->display();

3. Fortaleça o encapsulamento e a herança

Melhore o encapsulamento usando métodos getter e setter e crie uma classe FeaturedArticle que herda de Article:

class FeaturedArticle extends Article {
    private $highlightColor = '#FFFF00'; // Default highlight color

    public function setHighlightColor($color) {
        $this->highlightColor = $color;
        return $this;
    }

    public function display() {
        echo "<div> style='background-color: {$this->highlightColor};'>";
        parent::display();
        echo "</div>";
    }
}

$featuredArticle = new FeaturedArticle("Featured Article", "This is a featured article.");
$featuredArticle->setStatus(FeaturedArticle::STATUS_PUBLISHED)->setHighlightColor('#FFA07A')->display();

4. Interfaces e polimorfismo

Defina uma interface para conteúdo publicável e implemente-a na classe Article para demonstrar o polimorfismo:

interface Publishable {
    public function publish();
}

class Article implements Publishable {
    // Existing class code...

    public function publish() {
        $this->setStatus(self::STATUS_PUBLISHED);
        echo "Article '{$this->title}' published.";
    }
}

function publishContent(Publishable $content) {
    $content->publish();
}

publishContent($article);

5. Utilize traits para comportamento compartilhado

O PHP permite que você use traits para adicionar funções a classes sem a necessidade de herdar de outra classe. Utilizando o código abaixo, introduza um trait para registrar atividades dentro do CMS:

trait Logger {
    public function log($message) {
        // Log message to a file or database
        echo "Log: $message";
    }
}

class Article {
    use Logger;

    // Existing class code...

    public function publish() {
        $this->setStatus(self::STATUS_PUBLISHED);
        $this->log("Article '{$this->title}' published.");
    }
}

OOP no desenvolvimento em WordPress

Os princípios da OOP aprimoram significativamente o desenvolvimento em WordPress, especialmente a criação de temas, plugins e widgets. Com a ajuda da OOP, você pode escrever códigos mais limpos, dimensionáveis e de manutenção mais fácil para os seus sites WordPress.

Esta seção analisa como aplicar a OOP no desenvolvimento em WordPress. Forneceremos exemplos que você pode copiar e colar num teste de implantação de WordPress.

A OOP em temas do WordPress: Registro de um tipo personalizado de artigo

Para demonstrar o uso da OOP em temas do WordPress, crie uma classe que lida com o registro de um tipo personalizado de artigo.

Coloque o código a seguir no arquivo functions.php do seu tema. Você pode encontrar seus temas no diretório wp-content/themes.

class CustomPostTypeRegistrar {
    private $postType;
    private $args;

    public function __construct($postType, $args = []) {
        $this->postType = $postType;
        $this->args = $args;
        add_action('init', array($this, 'registerPostType'));
    }

    public function registerPostType() {
        register_post_type($this->postType, $this->args);
    }
}

// Usage
$bookArgs = [
    'public' => true,
    'label'  => 'Books',
    'supports' => ['title', 'editor', 'thumbnail'],
    'has_archive' => true,
];
new CustomPostTypeRegistrar('book', $bookArgs);

Esse código registra dinamicamente um tipo personalizado de artigo book com seus detalhes passados usando o array bookArgs. Você pode ver o tipo personalizado de artigo recém-criado na barra lateral do painel do WordPress, em Books.

O elemento da barra lateral Books para tipos personalizados de artigos com a respectiva opção Add New Post.
O elemento da barra lateral Books para tipos personalizados de artigos com a respectiva opção Add New Post.

Esse exemplo ilustra como a OOP pode encapsular a funcionalidade de registro de tipos personalizados de artigo, tornando-a reutilizável para diferentes tipos de artigos.

OOP em plugins do WordPress: manipulador de shortcode

Para um exemplo de plugin, desenvolva uma classe que manipula um shortcode para exibir uma mensagem especial. Você pode testar esse recurso adicionando o shortcode abaixo a qualquer artigo ou página.

<?php
/**
* Plugin Name: OOP Shortcode Handler
* Description: Handles a custom shortcode with OOP.
* Version: 1.0
* Author: Name
*/

class OOPShortcodeHandler {
    public function __construct() {
        add_shortcode('oop_message', array($this, 'displayCustomMessage'));
    }

    public function displayCustomMessage($atts) {
        $attributes = shortcode_atts(['message' => 'Hello, this is your OOP     
message!'], $atts);
        return "<div>{$attributes['message']}</div>";
    }
}

new OOPShortcodeHandler();

Salve-o como my-oop-shortcode-handler.php no diretório wp-content/plugins. Por fim, ative o plugin.

O My OOP Shortcode Handler listado na página Plugins.
O My OOP Shortcode Handler listado na página Plugins.

Em seguida, no editor de página ou de artigo, antes de publicar ou atualizar, use os shortcodes [oop_message] e [oop_message message="Custom Message Here"], como mostrado abaixo:

A página de amostra no modo de edição com a mensagem personalizada do shortcode adicionada.
A página de amostra no modo de edição com a mensagem personalizada do shortcode adicionada.

Após publicar ou atualizar a página/artigo, você verá a mensagem que os shortcodes exibidos denotam.

A página de amostra publicada exibindo a mensagem personalizada do shortcode.
A página de amostra publicada exibindo a mensagem personalizada do shortcode.

OOP nos widgets do WordPress: widget de conteúdo dinâmico

A OOP também é útil para os widgets, pois encapsula sua funcionalidade em classes. O próprio núcleo do WordPress usa OOP para widgets. Aqui, você cria um widget personalizado que permite aos usuários exibir conteúdo dinâmico com um título e uma área de texto.

Adicione o código a seguir ao arquivo functions.php do seu tema ou em um plugin. Isso define um widget personalizado que exibe a mensagem “Hello World From My Custom Widget!”

class My_Custom_Widget extends WP_Widget {

    public function __construct() {
        parent::__construct(
            'my_custom_widget', // Base ID
            'My Custom Widget', // Name
            array('description' => __('A simple custom widget.', 
'text_domain'),) // Args
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        if (!empty($instance['title'])) {
            echo $args['before_title'] . apply_filters('widget_title',  
$instance['title']) . $args['after_title'];
        }
        // Widget content
        echo __('Hello World From My Custom Widget!', 'text_domain');
        echo $args['after_widget'];
    }

    public function form($instance) {
        // Form in WordPress admin
    }

    public function update($new_instance, $old_instance) {
        // Processes widget options to be saved
    }
}

function register_my_custom_widget() {
    register_widget('My_Custom_Widget');
}
add_action('widgets_init', 'register_my_custom_widget');

Ao editar o tema ativo usando o link Customize em Appearance no painel de controle, você pode adicionar um novo widget personalizado sempre que necessário.

A configuração de widget personalizado na barra lateral e o uso do widget em uma página de amostra.
A configuração de widget personalizado na barra lateral e o uso do widget em uma página de amostra.

Utilização de classes do WordPress

O WordPress oferece várias classes que você pode usar para interagir com a funcionalidade principal do CMS. Duas dessas classes são WP_User e WP_Post, que representam usuários e artigos, respectivamente.

Estendendo o exemplo do plugin WordPress acima, incorpore essas classes para criar um shortcode que exiba informações sobre o autor de um artigo e detalhes sobre o próprio artigo.

Salve-o como my-oop-shortcode-handler-extended.php no diretório wp-content/plugins. Por fim, ative o plugin.

<?php
/**
* Plugin Name: Extended OOP Shortcode Handler
* Description: Extends the shortcode handler to display post and author 
information.
* Version: 1.1
* Author: Your Name
*/

class ExtendedOOPShortcodeHandler {
    public function __construct() {
        add_shortcode('post_author_details', array($this,   
'displayPostAuthorDetails'));
    }

    public function displayPostAuthorDetails($atts) {
        global $post; // Accessing the global $post object to get current post  
details

        $attributes = shortcode_atts([
            'post_id' => $post->ID, // Default to the current post ID
        ], $atts);

        $postDetails = get_post($attributes['post_id']); // Getting the WP_Post  
object
        if (!$postDetails) {
            return "Post not found.";
        }

        $authorDetails = new WP_User($postDetails->post_author); // Getting the 
WP_User object

        $output = "<div class='post-author-details'>";
        $output .= "<h2>Author Information</h2>";
        $output .= "<p>Name: " . esc_html($authorDetails->display_name) . 
"</p>";
        $output .= "<h2>Post Information</h2>";
        $output .= "<p>Title: " . esc_html($postDetails->post_title) . "</p>";
        $output .= "<p>Content: " . 
esc_html(wp_trim_words($postDetails->post_content, 20, '...')) . "</p>";
        $output .= "</div>";

        return $output;
    }
}

new ExtendedOOPShortcodeHandler();

Nessa versão estendida, você criou um shortcode: [post_author_details post_id="1"].

A página de amostra no modo de edição com a mensagem personalizada do shortcode.
A página de amostra no modo de edição com a mensagem personalizada do shortcode.

Quando adicionado a um artigo ou página, ele exibe detalhes sobre o autor do artigo (usando a classe WP_User) e o próprio artigo (usando a classe WP_Post).

OOP e a API REST do WordPress

A API REST do WordPress é uma adição moderna ao WordPress que permite interagir com os dados do site de forma mais programável. Ela aproveita amplamente a OOP, utilizando classes para definir os endpoints, as respostas e o tratamento das solicitações. Isso representa uma clara transição de suas raízes procedurais tradicionais para a adoção da OOP.

Em franco contraste com os princípios da OOP, grande parte do núcleo do WordPress, especialmente seus componentes anteriores, como a API de temas e plugins, é escrita em um estilo de programação procedural.

Por exemplo, enquanto uma abordagem procedural pode manipular diretamente variáveis globais e depender de uma sequência de funções para tarefas, a OOP na API REST encapsula a lógica em classes. Portanto, métodos específicos dentro dessas classes lidam com tarefas como buscar, criar, atualizar ou excluir artigos.

Isso separa claramente as preocupações e torna a base de código mais fácil de estender e depurar.

Por meio de classes que definem endpoints e manipulam solicitações, como a busca de artigos com uma solicitação GET /wp-json/wp/v2/posts, a API REST oferece uma maneira estruturada e escalável de interagir com os dados do WordPress, retornando respostas formatadas em JSON.

Aproveitando a Kinsta para hospedagem PHP e WordPress

As soluções de hospedagem da Kinsta ajudam a otimizar os aplicativos PHP e a gerenciar a hospedagem de WordPress, atendendo a configurações tradicionais de PHP e necessidades específicas do WordPress. Com uma infraestrutura robusta construída sobre tecnologias de ponta como o Google Cloud, a Kinsta facilita desempenho e escalabilidade sem paralelos para aplicativos PHP baseados em OOP.

Para sites WordPress, o serviço especializado de hospedagem de sites WordPress da Kinsta oferece recursos como atualizações automáticas, monitoramento de segurança e suporte de especialistas. E garante um gerenciamento sem complicações e um desempenho superior, tornando ideal para desenvolvedores e empresas.

Resumo

Como você viu ao longo deste artigo, a OOP oferece flexibilidade, escalabilidade e facilidade de manutenção incomparáveis no desenvolvimento de PHP e WordPress.

Como um dos principais provedores de hospedagem gerenciada de sites WordPress, a Kinsta reconhece essa necessidade e oferece soluções sob medida para apoiar desenvolvedores como você em seus esforços com PHP OOP. É por isso que nossas soluções de Hospedagem de Aplicativos e WordPress são projetadas para ajudar você a criar projetos WordPress de alto desempenho, escaláveis e baseados em OOP.

Experimente a Kinsta hoje para ver como podemos ajudar você a criar sites WordPress de alto nível!

Você já experimentou os benefícios da OOP em seus projetos? Ou está curioso para saber como ela pode transformar seu processo de desenvolvimento? Compartilhe com um comentário abaixo.

Jeremy Holcombe Kinsta

Content & Marketing Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems ;).