Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi turma!
To com uma dúvida simples hoje, rs.
<?php
class Pagina {
/**********
# CLASSE #
**********/
// VARIAVEIS
// ...
// CONTRUCT
function __construct() { }
// DESTRUCT
function __destruct() { }
/**********
# CLASSE #
**********/
}
class paginaRPP {
/********************
# CLASSE Registros #
********************/
// VARIAVEIS
protected $rpp = 0;
protected $rpp_opcoes = array( 10 => 10, 25 => 25, 50 => 50, 100 => 100, 250 => 250, 500 => 500, 1000 => 1000, 'Todos' => 0 );
private $rppPadrao = 20;
// OPCOES
protected function rpp_opcoes() { sort($this->rpp_opcoes); return $this->rpp_opcoes; }
// SELECAO
public function rpp_setar( $rpp = null ) { $this->rpp = in_array($rpp, $this->rpp_opcoes()) ? $rpp : $this->rppPadrao; }
/********************
# CLASSE Registros #
********************/
}
class paginaORD {
/********************
# CLASSE Ordenacao #
********************/
// VARIAVEIS
protected $ord = 0;
protected $ord_opcoes = array();
private $ordPadrao = 1;
/**********
# OPCOES #
**********/
// OPCOES
protected function ord_opcoes() { return $this->ord_opcoes; }
// ADICAO
public function ord_adicionar( $nome = '', $sql = '', $padrao = false ) {
if ( empty($nome) || empty($sql) ) return false;
$id = count($this->ord_opcoes()) + 1;
$this->ord_opcoes[$id] = array( 'nome' => $nome, 'sql' => $sql );
if ( $padrao ) $this->ordPadrao = $id;
return true;
}
// SELECAO
public function ord_setar( $ord = null ) { $this->ord = array_key_exists($ord, $this->ord_opcoes()) ? $ord : $this->ordPadrao; }
/********************
# CLASSE Ordenacao #
********************/
}
?>
Na minha santa ignorância, rs, tentei fazer isso:
class Pagina extends paginaRPP, paginaORD {
...
}
Quando, ate meu conhecimento vai, funcionaria fazendo:
class Pagina {
function __construct() {
$this->rpp = new paginaRPP();
$this->ord = new paginaORD();
}
}
A dúvida é: é possível uma alternativa funcional ao que sugeri no título?
[]'s
herança(extends) vc so pode ter uma, interfaces (implements) vc pode ter varias.
>
Não, PHP não tem herança múltipla...
Você pode simular isso com interfaces, ou fazer uma delegação através de composição, que foi o que vocè começou no último bloco que postou (pesquise sobre).
Explique exatamente qual o intuito de tudo isso...
Isso, composição é o que eu faço, contudo isto me obriga a ter diversas propriedades e funcões, nas filhas, que deveriam ser protected ou private como public por ter de acessá-las na classe pai.
O objetivo era ter todos os métodos das classes com suas devidas restrições, mantendo o código todo mais organizado e individualizado por função.
>
herança(extends) vc so pode ter uma, interfaces (implements) vc pode ter varias.
http://php.net/manual/en/function.class-implements.php
Desconhecia esta estrutura, começando a ler agora... Obrigado.
Companheiro, herança deve ser usada com responsabilidade, caso contrário, você terá sérios problemas em seu código.
Em 90% dos casos que você quiser usar herança, vai ser melhor usar composição.
Explique qual a sua intenção que vai ser mais fácil te indicar a direção certa.
É algo concreto ou só teórico?
se usa o php 5.4,
http://php.net/manual/pt_BR/language.oop5.traits.php
é quase uma "herença multipla" =X
>
Companheiro, herança deve ser usada com responsabilidade, caso contrário, você terá sérios problemas em seu código.
Em 90% dos casos que você quiser usar herança, vai ser melhor usar composição.
Explique qual a sua intenção que vai ser mais fácil te indicar a direção certa.
É algo concreto ou só teórico?
Concreto. Estou mudando minha classe de paginação.
Resumindo: antes eu usava 5 classes, distintas e instanciadas separadamente ao decorrer e necessidade de cada página/script, rpp (registros por página), pesquisa, filtro, paginacao e ordenacao. Dai, renovando a base dos sistemas surgiu a idéia de enxugar e organizar o código unindo-as numa nova classe chamada Pagina, este é o objetivo.
A primeira opção que me surgiu foi a classe Pagina herdar todas as outras, não sendo possível, usei composição e daí surgiu um problema: perdi o controle sobre o encapsulamento das childs.
O que queria é uma alternativa onde eu pudesse preservar os encapsulamentos não tendo que tornar quase tudo público.
>
se usa o php 5.4,
http://php.net/manual/pt_BR/language.oop5.traits.php
é quase uma "herença multipla" =X
Hehe, vlw. Estou limitado, no momento, ao 5.3 devido a restrições do programa de encriptação de código que uso (não suporta 5.4), mas vou ler sobre! Abraço.
Não, PHP não tem herança múltipla...
Você pode simular isso com interfaces, ou fazer uma delegação através de composição, que foi o que vocè começou no último bloco que postou (pesquise sobre).
Explique exatamente qual o intuito de tudo isso...