by luizmagao@gmail.com
<?php
class SimpleClass
{
// declaração de propriedade
public $var = 'um valor padrão';
// declaração de método
public function displayVar() {
echo $this->var;
}
}
{
"name": "luizmagao/phpoo-101",
"require-dev": {
"symfony/var-dumper": "7.1"
},
"authors": [
{
"name": "Luiz Lins",
"email": "luizmagao@gmail.com"
}
],
"require": {}
}
<?php
require "../vendor/autoload.php";
class Person
{
}
$person = new Person();
dd($person);
<?php
require "../vendor/autoload.php";
class Person
{
public string $name;
public int $age;
public string $gender;
public function walk(): string
{
return "I am walking";
}
public function run(): string
{
return "I am run";
}
}
$person = new Person();
dd($person->run());
<?php
require "../vendor/autoload.php";
class Person
{
public string $name;
public int $age;
public string $gender;
public function walk(): string
{
return $this->name . " is walking";
}
public function run(): string
{
return "I am run";
}
}
$person = new Person();
$person->name = "Luiz Lins";
dd($person);
<?php
require "../vendor/autoload.php";
class Person
{
public string $name;
public int $age;
public string $gender;
public function walk(): string
{
return $this->name . " is walking";
}
public function run(): string
{
return "I am run";
}
public function data(): array
{
return [
'name' => $this->name,
'age' => $this->age,
'gender' => $this->gender
];
}
}
$person = new Person();
$person->name = "Luiz Lins";
$person->age = 42;
$person->gender = "Masculino";
dd($person->data());
<?php
require "../vendor/autoload.php";
class Person
{
public string $name;
public int $age;
public string $gender;
public function walk(): string
{
return $this->name . " is walking";
}
public function run(string $name): string
{
return "I am run";
}
public function data(): array
{
return [
'name' => $this->name,
'age' => $this->age,
'gender' => $this->gender
];
}
}
$person = new Person();
dd($person->run('teste'));
<?php
require "../vendor/autoload.php";
class Person
{
public string $name;
public int $age;
public string $gender;
public function __construct()
{
dd('I am a constructor');
}
public function walk(): string
{
return $this->name . " is walking";
}
public function run(string $name): string
{
return "I am run";
}
public function data(): array
{
return [
'name' => $this->name,
'age' => $this->age,
'gender' => $this->gender
];
}
}
$person = new Person();
<?php
require "../vendor/autoload.php";
class Person
{
public string $name;
public int $age;
public string $gender;
public function __construct(string $name, int $age, string $gender)
{
$this->name = $name;
$this->age = $age;
$this->gender = $gender;
}
public function walk(): string
{
return $this->name . " is walking";
}
public function run(string $name): string
{
return "I am run";
}
public function data(): array
{
return [
'name' => $this->name,
'age' => $this->age,
'gender' => $this->gender
];
}
}
$person = new Person('Luiz Lins', 42, 'Masculino');
<?php
require "../vendor/autoload.php";
class Person
{
//public string $name;
//public int $age;
//public string $gender;
public function __construct(public string $name, public int $age, public string $gender)
{
//$this->name = $name;
//$this->age = $age;
//$this->gender = $gender;
}
public function walk(): string
{
return $this->name . " is walking";
}
public function run(string $name): string
{
return "I am run";
}
public function data(): array
{
return [
'name' => $this->name,
'age' => $this->age,
'gender' => $this->gender
];
}
}
$person = new Person('Luiz Lins', 42, 'Masculino');
<?php
require './vendor/autoload.php';
class HomeController
{
private function view(string $view): string
{
return $view;
}
public function index(): string
{
reurn $this->view('home');
}
}
$controller = new HomeController();
dd($controller->view());
dd($controller->index());
<?php
require './vendor/autoload.php';
class HomeController
{
private function view(string $view): string
{
return $view;
}
public function index(): string
{
reurn $this->view('home');
}
}
class LoginController
{
private function view(string $view): string
{
return $view;
}
public function index(): string
{
reurn $this->view('login');
}
}
$controller = new LoginController();
dd($controller->view());
dd($controller->index());
<?php
require './vendor/autoload.php';
class HomeController extends BaseController
{
public function index(): string
{
reurn $this->view('home');
}
}
class LoginController extends BaseController
{
public function index(): string
{
reurn $this->view('login');
}
}
class BaseController
{
protected function view(string $view): string
{
return $view;
}
}
$controller = new LoginController();
dd($controller->view());
dd($controller->index());
<?php
abstract class ClasseAbstrata
{
// Força a classe que estende ClasseAbstrata a definir esse método
abstract protected function pegarValor();
abstract protected function valorComPrefixo($prefixo);
// Método comum
public function imprimir()
{
print $this->pegarValor();
}
}
class ClasseConcreta1 extends ClasseAbstrata
{
protected function pegarValor()
{
return "ClasseConcreta1";
}
public function valorComPrefixo($prefixo)
{
return "{$prefixo}ClasseConcreta1";
}
}
class ClasseConcreta2 extends ClasseAbstrata
{
protected function pegarValor()
{
return "ClasseConcreta2";
}
public function valorComPrefixo($prefixo)
{
return "{$prefixo}ClasseConcreta2";
}
}
$classe1 = new ClasseConcreta1();
$classe1->imprimir();
echo $classe1->valorComPrefixo('FOO_'), "\n";
$classe2 = new ClasseConcreta2();
$classe2->imprimir();
echo $classe2->valorComPrefixo('FOO_'), "\n";
<?php
require './vendor/autoload.php';
abstract class Logger
{
abstract public function log($message): string;
}
class FileLog extends Logger
{
protected function log($message): string
{
return 'FileLog: ' . $message;
}
}
class DatabaseLog extends Logger
{
protected function log($message): string
{
return 'DatabaseLog: ' . $message;
}
}
$logger = new FileLog;
dd($logger->log('Hello World'));
<?php
require './vendor/autoload.php';
class HomeController extends BaseController
{
public function index(): string
{
reurn $this->view('home');
}
}
class LoginController extends BaseController
{
public function index(): string
{
reurn $this->view('login');
}
}
class BaseController
{
protected function view(string $view): string
{
return $view;
}
}
$controller = new LoginController();
dd($controller->view());
dd($controller->index());
<?php
require './vendor/autoload.php';
class HomeController extends BaseController
{
public function index(): string
{
reurn $this->view('home');
}
}
class LoginController extends BaseController
{
public function index(): string
{
reurn $this->view('login');
}
}
abstract class BaseController
{
protected function view(string $view): string
{
return $view;
}
abstract public function index(): string;
}
$controller = new LoginController();
dd($controller->view());
dd($controller->index());
<?php
interface Template
{
public function setVariable($name, $var);
public function getHtml($template);
}
class WorkingTemplate implements Template
{
private $var = [];
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
public function getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
class BadTemplate implements Template
{
private $var = [];
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
}
<?php
require './vendor/autoload.php';
class MysqlDatabase {}
class SqLiteDatabase {}
class PsgDatabase {}
Class Database {
public function connect(sting $type)
{
if($type === 'mysql') {
return new MysqlDatabase();
} elseif($type === 'sqlite') {
return new SqLiteDatabase();
} elseif($type === 'psg') {
return new PsgDatabase();
}
}
}
$database = new Database();
$connect = $database->connect('mysql');
dd($connect);
Tenho que mudar o IF toda vida pra uma nova classe?
<?php
require './vendor/autoload.php';
interface DatabaseInterface
{
public function connect();
}
class MysqlDatabase implements DatabaseInterface
{
public function connect()
{
return 'Connect to MySQL';
}
}
class SqLiteDatabase implements DatabaseInterface
{
public function connect()
{
return 'Connect to SqLiteDatabase';
}
}
class PsgDatabase implements DatabaseInterface
{
public function connect()
{
return 'Connect to PsgDatabase';
}
}
Class Database {
public function connect(DatabaseInterface $database)
{
return $database->connect();
}
}
$database = new Database();
$connect = $database->connect(new MysqlDatabase);
dd($connect);
Vamos criar um exemplo nosso, pode ser um boleto bancário de vários bancos.
state of objects
estrutura básica do PHP
- Realizado: O pedido foi feito, mas ainda não foi aceito pelo restaurante.
- Preparando: O restaurante aceitou o pedido e está preparando a comida.
- A Caminho: A comida foi preparada está sendo entregue ao cliente.
- Entregue: A comida foi entregue ao cliente e o pedido está concluído.
ROLES
<?php
namespace App;
class Pedido
{
public function __construct(private string $estado = "REALIZADO"){}
public function getEstado(): string
{
reutrn $this->estado;
}
public function setEstado(string $estado): void
{
$this->estado = $estado;
}
}
<?php
use App\Pedido;
require 'vendor/autoload.php';
$pedido = new Pedido();
$pedido->getEstado();