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.