Array
(
)

Trabalhando com métodos mágicos __Get e Set em PHP

PHP
Anacleto Linux
   - 21 ago 2016

1º - Trabalhando com métodos mágicos (__Get e __Set) como faço para sobrescrever um método protegido (protected $salario;)? Como os métodos get e set era mais fácil eu era só sobrescrever o método get e na nova classe.
És o print do código a baixo quero o contabilista e o programador tenham o cálculo do salário efectuado de forma diferente, como faço usando o código abaixo?
2º - Posso trabalhar com os métodos get e set em vez dos mágicos (__get e __set), será não haverá problema no código?
3º - Quais as vantagens de um e de outro?
#Código
<?php
// Criação da classe funcionário
class Funcionario{
private $nome;
private $datanasc;
private $identificacao;
protected $salario;

// Criação dos métodos __Get e __Set
public function __get($valor){
return $this->$valor;
}
public function __set($propriedade,$valor){
$this->$propriedade = $valor;
}
}
?>

#Código
<?php
// Criação da classe contabilista
class Contabilista extends Funcionario {
private $CRC;

public function __costruct($nome,$datanasc,$identificacao,$salario, $CRC){
parent::__costruct($nome,$datanasc,$identificacao,$salario);

}
public function __get($valor){
return $this->$valor;
}
public function __set($propriedade,$valor){
$this->$propriedade = $valor;
}
}
?>

#Código
<?php
// Criação da classe programador
class Programador extends Funcionario {
private $lingprog;

public function __costruct($nome,$datanasc,$identificacao, $salario,$lingprog){
parent::__costruct($nome,$datanasc,$identificacao, $salario);
}
public function __get($valor){
return $this->$valor;
}
public function __set($propriedade,$valor){
$this->$propriedade = $valor;
}
}

?>

#Código
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
<title>Untitled Document</title>
</head>
<?php
// Criação da página index
include(\"Funcionario.class.php\");
include(\"Contabilista.class.php\");
include(\"Programador.class.php\");

$objpessfis = new Contabilista();
$objpessfis->nome = \"Carlos Buta\";
$objpessfis->datanasc = \"15 de Junho de 1987\";
$objpessfis->identificacao = \"002025701LA036\";
$objpessfis->salario = 2090;

echo \"<h2>Dados da Pessoa Física</h2>\";
echo \"Nome: \".$objpessfis->nome;
echo \"
\";
echo \"Data de Nascimento: \".$objpessfis->datanasc;
echo \"
\";
echo \"BI: \".$objpessfis->identificacao;
echo \"
\";

$objempresa = new Programador();
$objempresa->nome = \"Anacleto Bunga\";
$objempresa->datanasc = \"01 de Dezembro de 2004\";
$objempresa->identificacao = \"003215410LA021\";
$objempresa-> salario = 3560;
$objempresa-> lingprog = \"PHP\";

echo \"<h2>Dados do Programador</h2>\";
echo \"Nome: \".$objempresa->nome;
echo \"
\";
echo \"Data de Nascimento: \".$objempresa->datanasc;
echo \"
\";
echo \"BI: \".$objempresa->identificacao;
echo \"
\";
echo \"Salário: \".$objempresa->salario;
echo \"
\";
echo \"Linguagem de Programação: \".$objempresa-> lingprog;

?>
<body>
</body>
</html>

Anacleto Linux
   - 22 ago 2016

Há algo que não perguntei lá em cima: Com relação ao construtor das classes filhas é possível trabalhar assim ou tem outra forma melhor?

Obrigado a todos.