Skip to content

josemalcher/CURSO_PHP_OO_ALEM-DAS-CLASSES

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CURSO PHP OO (ALÉM DAS CLASSES)

https://academy.especializati.com.br/curso/php-oo-alem-das-classes

PRENDA DE UMA VEZ POR TODAS PHP ORIENTADO A OBJETOS E AS MELHORES PRÁTICAS PARA A LINGUAGEM.

  1. Organização PHP OO
  2. PHP OO na Prática
  3. Além das Classes

Voltar ao Índice


  • 04 - PHP OO Classes e Atributos free
<?php

class Product{
    var $name;
    var $description;
    var $price;
}

$tv = new Product();
$tv->name = "TV";
$tv->price = 4.500;
$tv->description = "Smart TV";

echo $tv->name; echo ", ";
echo $tv->description; echo ", ";
echo $tv->price;

echo "<hr>";

$geladeira = new Product();
$geladeira->name = "Geladeira";
$geladeira->price = 500;
$geladeira->description = "Duas Portas";

echo $geladeira->name; echo ", ";
echo $geladeira->description; echo ", ";
echo $geladeira->price;
  • 05 - PHP OO Métodos
<?php

class Product{
    var $name;
    var $description;
    var $price;

    function get(): String
    {
        return "{$this->name} # {$this->description} $ {$this->price} <hr>";
    }

}

$tv = new Product();
$tv->name = "TV";
$tv->price = 4.500;
$tv->description = "Smart TV";
echo $tv->get();

$geladeira = new Product();
$geladeira->name = "Geladeira";
$geladeira->price = 500;
$geladeira->description = "Duas Portas";

echo $geladeira->get();
  • 06 - PHP OO Exercício de Desafio
  • 07 - PHP OO Avançando com Métodos
<?php

class Product{
    var $name;
    var $description;
    var $price;

    public function getDescription():String
    {
        return $this->description;
    }
    public function setDescription($description): void
    {
        $this->description = $description;
    }

    public function getPrice():float
    {
        return $this->price;
    }
    public function setPrice($price): void
    {
        $this->price = $price;
    }
    function setName($name){
     $this->name = $name;
    }
    function getName():String{
        return strtoupper($this->name);
    }
    function get(): String
    {
        return "{$this->getName()} # {$this->getDescription()} $ {$this->getPrice()} <hr>";
    }
}

$tv = new Product();
$tv->setName("TV Samsaunga");
$tv->setPrice(4.500);
$tv->setDescription("Smart TV");
echo $tv->get();

$geladeira = new Product();
$geladeira->setName("Geladeira Bill Lux");
$geladeira->setPrice(500) ;
$geladeira->setDescription("Duas Portas - qualidade");

echo $geladeira->get();
  • 08 - PHP OO Método Construtor
<?php
class Product{
    var $name;
    var $description;
    var $price;

    public function __construct(String $name,String $description, float $price)
    {
        $this->name = $name;
        $this->description = $description;
        $this->price = $price;
    }

    function get(){
        return "{$this->name} # {$this->description} $ {$this->price} <hr>";
    }
}

$tv = new Product("TV Sansung", "Televisão de 50pol", 3000);
echo $tv->get();

$geladeira = new Product("Geladeira", "Duas Portas", 2000);
echo $geladeira->get();
  • 09 - PHP OO Método Destrutor
    public function __destruct()
    {
      echo "<br>Método destrutor ativado!";
    }
  • 10 - Introdução a Herança no PHP
<?php
/*
 * SEM HERANÇA
 * 
 * */
class ContaFisica
{
    var $number;
    var $name;
    var $cpf;

    public function __construct($number, $name, $cpf)
    {
        $this->number = $number;
        $this->name = $name;
        $this->cpf = $cpf;
    }

    public function getNumber()
    {
        return $this->number;
    }

    public function setNumber($number): void
    {
        $this->number = $number;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setName($name): void
    {
        $this->name = $name;
    }

    public function getCpf()
    {
        return $this->cpf;
    }

    public function setCpf($cpf): void
    {
        $this->cpf = $cpf;
    }

    function getDados(){
        return "Nome: {$this->getName()}, Número: {$this->getNumber()}, CPF: {$this->getCpf()}";
    }

}

class ContaJuridica
{
    var $number;
    var $name;
    var $cnpj;

    public function __construct($number, $name, $cnpj)
    {
        $this->number = $number;
        $this->name = $name;
        $this->cnpj = $cnpj;
    }

     public function getNumber()
    {
        return $this->number;
    }

    public function setNumber($number): void
    {
        $this->number = $number;
    }

    public function getName()
    {
        return $this->name;
    }


    public function setName($name): void
    {
        $this->name = $name;
    }


    public function getCnpj()
    {
        return $this->cnpj;
    }

    public function setCnpj($cnpj): void
    {
        $this->cnpj = $cnpj;
    }
    function getDados(){
        return "Nome: {$this->getName()}, Número: {$this->getNumber()}, CNPJ: {$this->getCnpj()}";
    }
}

$jose = new ContaFisica(123, "José Malcher", 123456678);
echo $jose->getDados();

echo "<hr>";

$empresa = new ContaJuridica(987, "Empresa Tal", 777666222);
echo $empresa->getDados();

/*
 * SEM HERANÇA
 * 
 * */
  • 11 - Herança no PHP
<?php

class Conta
{
    var $number;
    var $name;

    public function __construct($number, $name)
    {
        $this->number = $number;
        $this->name = $name;
    }

    public function getNumber()
    {
        return $this->number;
    }

    public function setNumber($number): void
    {
        $this->number = $number;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setName($name): void
    {
        $this->name = $name;
    }


}

class ContaFisica extends Conta
{
    var $cpf;

    /**
     * ContaFisica constructor.
     * @param $cpf
     */
    public function __construct($number, $name, $cpf)
    {
        Conta::setNumber($number);
        Conta::setName($name);
        $thisConta= $cpf;
    }


    public function getCpf()
    {
        return $this->cpf;
    }

    public function setCpf($cpf): void
    {
        $this->cpf = $cpf;
    }

    function getDados()
    {
        return "Nome: {$this->getName()}, Número: {$this->getNumber()}, CPF: {$this->getCpf()}";
    }

}

class ContaJuridica extends Conta
{
    var $cnpj;

    public function __construct($number, $name, $cnpj)
    {
        Conta::setNumber($number);
        Conta::setName($name);
        $this->cnpj = $cnpj;
    }

    public function getCnpj()
    {
        return $this->cnpj;
    }

    public function setCnpj($cnpj): void
    {
        $this->cnpj = $cnpj;
    }

    function getDados()
    {
        return "Nome: {$this->getName()}, Número: {$this->getNumber()}, CNPJ: {$this->getCnpj()}";
    }
}

$jose = new ContaFisica(123, "José Malcher", 123456678);
echo $jose->getDados();

echo "<hr>";

$empresa = new ContaJuridica(987, "Empresa Tal", 777666222);
echo $empresa->getDados();
  • 12 - Polimorfismo no PHP
<?php

class Conta
{
    var $number;
    var $name;

    public function __construct($number, $name)
    {
        $this->number = $number;
        $this->name = $name;
    }

    public function getNumber()
    {
        return $this->number;
    }

    public function setNumber($number): void
    {
        $this->number = $number;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setName(String $name): void
    {
        $this->name = $name;
    }


}

class ContaFisica extends Conta
{
    var $cpf;

    /**
     * ContaFisica constructor.
     * @param $cpf
     */
    public function __construct($number, $name, $cpf)
    {
        Conta::setNumber($number);
        Conta::setName($name);
        $thisConta= $cpf;
    }


    public function getCpf()
    {
        return $this->cpf;
    }

    public function setCpf($cpf): void
    {
        $this->cpf = $cpf;
    }

    function getDados()
    {
        return "Nome: {$this->getName()}, Número: {$this->getNumber()}, CPF: {$this->getCpf()}";
    }

}

class ContaJuridica extends Conta
{
    var $cnpj;

    public function __construct($number, $name, $cnpj)
    {
        Conta::setNumber($number);
        $this->setName($name);
        $this->cnpj = $cnpj;
    }

    public function getCnpj()
    {
        return $this->cnpj;
    }

    public function setCnpj($cnpj): void
    {
        $this->cnpj = $cnpj;
    }

    public function setName(String $name): void
    {
        $this->name = strtoupper($name); // REESCRITA
    }

    function getDados()
    {
        return "Nome: {$this->getName()}, Número: {$this->getNumber()}, CNPJ: {$this->getCnpj()}";
    }


}

$jose = new ContaFisica(123, "José Malcher", 123456678);
echo $jose->getDados();

echo "<hr>";

$empresa = new ContaJuridica(987, "Empresa Tal", 777666222);
echo $empresa->getDados();
  • 13 - Classes Abstratas no PHP
<?php

abstract class Conta
{
    var $number;
    var $name;
// .....
}
//$empresaAbstrata = new Conta(); // não é possivel por ser uma classe abstrata
  • 14 - Métodos Abstratos no PHP
<?php

abstract class Conta
{
    var $number;
    var $name;

    abstract public function getData() : String;

}

class ContaFisica extends Conta
{
    var $cpf;

    public function getData(): string
    {
        return "Nome: {$this->getName()}, Número: {$this->getNumber()}, CPF: {$this->getCpf()}";   // TODO: Implement getData() method.
    }
}

class ContaJuridica extends Conta
{
    var $cnpj;

    public function getData(): string
    {
        return "Nome: {$this->getName()}, Número: {$this->getNumber()}, CNPJ: {$this->getCnpj()}";
    }

}
  • 15 - Classes Finais no PHP
final class ContaFisica extends Conta
{
    var $cpf;

    public function getData(): string
    {
        return "Nome: {$this->getName()}, Número: {$this->getNumber()}, CPF: {$this->getCpf()}";   // TODO: Implement getData() method.
    }
}

final class ContaJuridica extends Conta
{
    var $cnpj;

    public function getData(): string
    {
        return "Nome: {$this->getName()}, Número: {$this->getNumber()}, CNPJ: {$this->getCnpj()}";
    }

}

 // imposibilita as classes de serem extendidas
  • 16 - Métodos Final no PHP
abstract class Conta
{
    var $number;
    var $name;

    final public function setNumber($number): void
    {
        $this->number = $number;
    }
}

// Garante que o método não será reescrito 
  • 17 - Encapsulamento no PHP OO
<?php

class Pessoa
{
    public $idade;
    protected $genero;
    private $name;

    public function getName()
    {
        return $this->name;
    }

    public function setName($name): void
    {
        $this->name = $name;
    }
}
  • 18 - Constantes no PHP OO
<?php
class Escola
{
    const PID = "AJDDDDFF";
}
$escola01 = new Escola();
echo $escola01::PID;

//$escola01::PID = 123; // não é possível
  • 19 - Propriedades Estáticas PHP OO
<?php

class Escola
{
    const PID = "AAFGGCC";
    static $saldo = 0.0;
}

class Aluno
{
    public $name;
    private $saldo = 0.0;

    public function setSaldo(float $saldo): void
    {
        $this->saldo = $saldo;
    }

    public function getSaldo(): float
    {
        return $this->saldo;
    }

    public function novaCompra(float $valor)
    {
        if ($this->saldo >= $valor) {
            $this->saldo -= $valor;

            Escola::$saldo += $valor; // Static

            return true;
        }else{
            return false;
        }
    }
}
  • 20 - Métodos Estáticos PHP OO
<?php

class Escola
{
    const PID = "AAFGGCC";
    private static $saldo = 0.0;

    static public function getSaldo(): float
    {
        return self::$saldo;
    }

    static public function setSaldo(float $saldo)
    {
        self::$saldo += $saldo;
    }
}

class Aluno
{
    public $name;
    private $saldo = 0.0;

    public function setSaldo(float $saldo): void
    {
        $this->saldo = $saldo;
    }

    public function getSaldo(): float
    {
        return $this->saldo;
    }

    public function novaCompra(float $valor)
    {
        if ($this->saldo >= $valor) {
            $this->saldo -= $valor;

            //Escola::$saldo += $valor; // Static propriedade
            Escola::setSaldo($valor); // Static methods

            return true;
        } else {
            return false;
        }
    }
}
echo "<hr>";

$aluno1 = new Aluno();
$aluno1->name = "JOSE";
echo $aluno1->getSaldo();
echo "<br>";
$aluno1->setSaldo(50.00);
$aluno1->novaCompra(20.0);
echo $aluno1->getSaldo();

echo "<br>";

echo "<hr>";

$aluno2 = new Aluno();
$aluno2->name = "JOSE";
echo $aluno2->getSaldo();
echo "<br>";
$aluno2->setSaldo(10.00);
$aluno2->novaCompra(5.0);
echo $aluno2->getSaldo();

echo "<br>";
echo "<hr>";

echo Escola::getSaldo();
  • 21 - Associação PHP OO
<?php

class Category
{
    public $name;
}

class Post
{
    public $title;
    public $content;
    private $category;

    public function getCategory(): Category
    {
        return $this->category;
    }

    public function setCategory( Category $category): void
    {
        $this->category = $category;
    }
}

$php = new Category();
$php->name = "PHP";

$post01 = new Post();
$post01->title = "PHP é Legal";
$post01->content = "...";
$post01->setCategory($php);

echo $post01->getCategory()->name;

  • 22 - Agregação PHP OO
<?php

class Cart{
    private $item = [];
    public function add(Product $product){
        array_push($this->item, $product);
    }
    public function all(): array
    {
        return $this->item;
    }
}
class Product{
    public $name;
}

$p1 = new Product();
$p1->name = "DVD";

$p2 = new Product();
$p2->name = "COMPUTADOR";

$p3 = new Product();
$p3->name = "GELAREIRA";

$cart = new Cart();
$cart->add($p1);
$cart->add($p2);
$cart->add($p3);
//print_r($cart->all());
$itens = $cart->all();
foreach ($itens as $iten):
    echo "Nome: {$iten->name} <br>";
endforeach;
  • 23 - Composição PHP OO
<?php

class Endereco
{
    public $rua;
    public $bairro;
}

class User
{
    public $name;
    private $endereco;

    public function setEndereco(string $rua, string $bairro): void
    {
        $endereco = new Endereco();
        $endereco->rua = $rua;
        $endereco->bairro = $bairro;
        $this->endereco = $endereco;
    }

    public function getEndereco(): string
    {
        return "Rua {$this->endereco->rua}, Bairro: {$this->endereco->bairro}";
    }
}

$jose = new User();
$jose->name = "José Malcher";
$jose->setEndereco("Travessa Tl tal tal ", "Cidade Velha tal");
echo $jose->getEndereco();
  • 24 - PHP OO Interfaces (Exemplo PDF)
<?php
// Classe com PROBLEMA

class DOMPDF
{
    static public function generate(string $content): string
    {
        return "<p>{$content}</p>";
    }

    static public function printPDF($file)
    {
        return $file;
    }
}

echo DOMPDF::printPDF("OLA"); // impressão

// ficamos "amarrados" a essa classe de impressão!
<?php
// MELHOR SOLUÇÃO
interface PdfInterface
{
    static public function generate(string $content): string;

    static public function printPDF($file);
}

class DOMPDF implements PdfInterface
{
    static public function generate(string $content): string
    {
        return "<small>{$content}</small>";
    }

    static public function printPDF($file)
    {
        return $file;
    }
}

class OutroPDF implements PdfInterface// outro metódo de impressão de PDF
{
    static public function generate(string $content): string
    {
        return "<h1>{$content}</h1>";
    }

    static public function printPDF($file)
    {
        return $file;
    }

}

class PDF extends OutroPDF
{

}

echo PDF::generate("Olá"); // impressão

// ficamos "amarrados" a essa classe de impressão!

Voltar ao Índice


  • 25 - Métodos Mágicos PHP OO - __get __set
<?php

class MyClass
{
    private $name;
    private $cpf;
    private $age;

    public function __set($name, $value)
    {
        $this->name = $value;
    }

    public function __get($name)
    {
        return $this->name;
    }

}

$obj = new MyClass();
$obj->name = "JoseMalcher";
$obj->cpf = 45688885;
$obj->age = 34;
echo $obj->name;
  • 26 - Métodos Máticos PHP OO - __call __callStatic __toString
<?php

class Str
{
    public function __call($name, $arguments)
    {
        //var_dump($arguments);
        if ($name === 'upper') {
            return strtoupper($arguments[0]);
        }
    }

    public static function __callStatic($name, $arguments)
    {
        if ($name === 'upper') {
            return strtoupper($arguments[0]);
        }
    }

    public function __toString()
    {
        return "__ToString!!";
    }

}

$obj = new Str();
echo $obj->upper("teste - eeeee"); // __call

echo "<hr>";

echo Str::upper('Valor com __callStatic'); // __callStatic

echo "<hr>";

echo $obj; // toString
  • 27 - Funções para manipulação de classes - parte 01
<?php

class MyClass
{
    public $name;
    protected $idade;
    private $salario;

    public function method01()
    {

    }

    protected function method02()
    {

    }

    private function method03()
    {

    }
}

$obj = new MyClass();
//$methods = get_class_methods($obj);
$methods = get_class_methods('MyClass');
var_dump($methods); // array(1) { [0]=> string(8) "method01" }

echo "<hr>";

$vars  = get_class_vars('Myclass');
var_dump($vars); // array(1) { ["name"]=> NULL }

echo "<hr>";

$objetos = get_object_vars($obj);
var_dump($objetos); // array(1) { ["name"]=> NULL }

echo "<hr>";

var_dump(get_class($obj)); // string(7) "MyClass"
  • 28 - Funções para manipulação de classes - parte 02
    • 28-Funcaes-para-manipulacao-de-classes-parte-03.php
var_dump(get_parent_class($obj)); // string(10) "MyClassDad"

echo "<hr>";

var_dump(is_subclass_of($obj,'MyClassDad'));// é filha de "myclassdad" bool(true)

echo "<hr>";

var_dump(is_subclass_of($obj,'MyClassDad2'));// bool(false)

echo "<hr>";

var_dump(method_exists($obj, 'method03')); //verifica se o método existe - bool(true)

echo "<hr>";

var_dump(property_exists($obj, 'name')); // bool(true)
var_dump(property_exists($obj, 'phone')); // bool(false)
  • 29 - Funções para manipulação de classes - parte 03
function teste($param1, $param2, $param3 ){
    return "{$param1} - {$param2} - {$param3}";
}
$functionN = "teste";
$className = "Myclass";
$param = [2,3, 4];
echo call_user_func($functionN, ... $param); // ... = 2,3
// 2 - 3 - 4

echo "<hr>";

echo call_user_func_array([$obj, 'method01'], []); // [] -> segundo parametro, como "method01" não recebe, vai vazio!
// methodo 01! - Default

echo "<hr>";

echo call_user_func_array([$obj, 'method01'], ["Teste call", "call_default"]); // [] -> segundo parametro, como "method01" não recebe, vai vazio!
// Teste call - call_default
  • 30 - Funções para manipulação de classes - parte 04
var_dump(class_exists('MyClass')); //bool(true)
var_dump(class_exists('MyClass222')); //bool(false)

echo "<hr>";

var_dump(is_a($obj, "MyClass")); // bool(true)
var_dump(is_a($obj, "MyClassDad")); // bool(true)
var_dump(is_a($obj, "MyClassDadFake")); // bool(false)

echo "<hr>";

var_dump($obj instanceof MyClassDad); // bool(true)
var_dump($obj instanceof MyClass); // bool(true)
var_dump($obj instanceof MyClassFake); // bool(false)

Voltar ao Índice


About

CURSO PHP OO (ALÉM DAS CLASSES)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages