Jump to content
Fórum Script Brasil
  • 1

Herança no PHP


Eder Leidson

Question

Ola pessoal, estou começando a trabalhar com PHP OO, estou com dúvidas na Herança...

Bom ai vai o codigo...

Pessoa.class.php

<?php

class Pessoa{
    private $nome;
    private $cpf;
    
    public function __construct($nome, $cpf){
        $this->cpf = $cpf;
        $this->nome = $nome;
    }
    
    function getNome(){
        return $nome;
    }
    function  setNome($nome){
        $this->nome = $nome;
    }
    
    function getCpf(){
        return $cpf;
    }
    function  setCpf($cpf){
        $this->cpf = $cpf;
    }
}

?>
Funcionario.class.php
<?php
require 'modelos/Pessoa.class.php';
class Funcionario extends Pessoa{
    private $usuario;
    private $senha;
    
     function __construct($nome, $cpf, $usuario, $senha)
    {
        parent::__construct($nome, $cpf);
        $this->usuario = $usuario;
        $this->senha = $senha;
        
    }
    
    
    function getUsuario(){
        return $this->usuario;
    }
    function  setUsuario($usuario){
        $this->usuario = $usuario;
    }
    
    function getSenha(){
        return $this->senha;
    }
    function  setSenha($senha){
        $this->senha = $senha;
    }
    
}
?>
funcionario.php
<html>
<body>
    <p>Incluir Dados</p>
    <form action="funcao_funcionario.php" method="post" >
    <label for="Nome">
    Nome:
    <br />
    <input type="text" name="nome"/></label>
    <br />
    <label for="Valor">CPF:
    <br />
    <input type="text" name="cpf" /></label>
    <br />
    <label for="Quantidade">Usuário:
    <br />
    <input type="text" name="usuario" /></label>
    <br />
    <label for="Quantidade">Senha:
    <br />
    <input type="text" name="senha" /></label>
    <br />
    <label for="Quantidade">Re-Senha:
    <br />
    <input type="text" name="reSenha" /></label>
    <br />
        <input type="submit" value="Salvar" />
    </form>
</body>
</html>
funcao_funcionario.php
<?php

require 'modelos/Funcionario.class.php';

$func = new Funcionario();

$func->setNome($_POST['nome']);

echo $func->getNome(); // bom estou tentando mostrar o nome aqui, mas não ta dando certo.


?>

Como deveria ficar meu arquivo funcao_funcionario.php para que possa mostrar todos os dados que vem do POST?

Agradeço desde já...

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 1
15 horas atrás, Lúcio Flávio da Silva Sales disse:

Estou tentando terminar a parte de alteração de dados de usuário num curso do SENAC, mas o negócio está enrolado.

 

 

 

Inicialmente vem uma imagem com o código abaixo para ser acrescentado na view index.php, que chama a sessão e busca o id do usuário:

 

if($resposta == "Sucesso") {
session_start();
$_SESSION["usuario_id"] = $objUsuario->getId();

header("Location: http://localhost/ecommerce/Views/Produto/listagem_produtos.php");}

 

É mandado fazer um método no arquivo usuario_controller.php, para receber o id do usuário:

<?php

...

public function getUsuario($_SESSION["usuario_id"]) {
$sql = "SELECT * FROM Usuarios WHERE id = $id";
return $_SESSION['usuario_id'];
}

Não há instruções específicas para criar o método, apenas é dito para fazer de acordo com os conhecimentos obtidos nas etapas anteriores, embora eu discorde que os conhecimentos anteriores sejam suficientes para deduzir a escrita dessa função.

 

As instruções são as seguintes:

"Na página de edição, vamos iniciar a sessão e criar uma variável $usuario, que vai receber um usuário do método getUsuario($_SESION[‘usuario_id’]), que deve ser criado no seu respectivo controller. Esse método recebe como parâmetro o id do usuário, que armazenamos na variável $_SESSION, seleciona o usuário através da instrução “SELECT * FROM Usuarios WHERE id = $id” e retorna o resultado obtido. Nosso código na view fica como na imagem a seguir".

 

Na imagem vem esse código que deve ser usado para criar o arquivo editar_usuario.php

session_start();

$usuario = $controllerUsuario->getUsuario($_SESSION["usuario_id"]);

if (isset($_POST['editar'])) {
$objUsuario = new Usuario($_POST['nome'], $_POST['email'], $_POST['senha'], $_POST['endereco']);


        $controllerUsuario = new UsuarioController();

        $resposta = $controllerUsuario->Editar($usuario['ID'],$objUsuario);
//        $resposta = $controllerUsuario->editaUsuario($usuario['ID'],$objUsuario); // Mudei o nome do método pois não existe método com o nome editaUsuario.

        if($resposta == "Sucesso"){
        $usuario = $controllerUsuario->getUsuario($_SESSION["usuario_id"]); // Não entendi o objetivo dessa linha. Ela está declarada na abertura da sessão.
            echo "Conta salva com sucesso!";

        }else{
            echo $resposta;            
        }


}
 

 

Mas a linha 32 do usuario_controller.php:

public function getUsuario($_SESSION["usuario_id"]) {

gera o seguinte erro quando acionado o botão para logar no index.php:

 

Parse error: syntax error, unexpected token "[", expecting ")" in /opt/lampp/htdocs/ecommerce/Controllers/usuario_controller.php on line 32

 

Já pesquisei muito sobre essa escrita, mas não encontro nada parecido para comparar com o essa construção suugerida no curso.

Vou passar o link do arquivo php_senac.zip com os arquivos index.php e usuario_controller.php, caso seja necessário analisar mais detalhes do código. Também passo a apostila com as instruções do curso.

 

http://luciocatende.com/php_senac.zip

 

É lamentável que a tutoria do curso é deficiente no auxílio ao aluno. Tenho encontrado muita dificuldade para realizar a última etapa do curso, que trata da alteração e exclusão de registros no banco de dados.

Agradeço se alguém puder me ajudar.

 

 

 

 

 

<!DOCTYPE html>
<html>
<body style="width:500px;margin:0 auto;margin-top:100px">
<?php if(isset($_GET['home'])){
	echo "Sinto muito, essa página não está pronta.";exit;} ?>
<form>
	E-mail:<input type=email name=email><p>
	Senha: <input type=password name=senha><p>
	<button type=submit>Entrar</button>
</form>
<?php
// esse código precisa de uma tabela no mysql: usuarios(id,email,senha)
if(isset($_GET['cadastrar'])){
	$Usuario=new Usuario();
	$Usuario->cadastrar();}
if(isset($_GET['editar'])){
	$Usuario=new Usuario();
	$velhoEmail=$_GET['velhoEmail'];
	$novoEmail=$_GET['editar'];
	$Usuario->editar($novoEmail,$velhoEmail);}
if(isset($_GET['excluir'])){
	$Usuario=new Usuario();
	$excluir=$_GET['excluir'];
	$Usuario->excluir($excluir);}

if(!isset($_GET['email'])){exit;}


class Usuario {
	public $id,$nome,$email,$senha,$endereco,$conexao;
	public function __construct(){
		$this->conexao = new mysqli("localhost","root","","laravel");
		return $this->conexao;}
	public function validaUsuario() {
		if ($this->validaEmail()) {
			if ($this->senha== null || strlen($this->senha) < 6) {
				return "Preencha a senha com no mínimo 6 caracteres!"; }
		return $this->Login();}}
	public function validaEmail() {
		if ($this->email == null) {
			echo "O e-mail é indispensável";
			return false;}
		elseif(strlen($this->email)>45) {
			echo "E-mail deve ter até 45 caracteres";
			return false;}
		return true;}
	public function Login() {
		$sql = "select * from usuarios where email = '$this->email'";
		$resposta = $this->conexao->query($sql);
		$usuario = $resposta->fetch_assoc();
		if (!$usuario) {
			echo "Email não cadastrado <a href=?cadastrar=$this->email&senha=$this->senha>Cadastrar $this->email</a>";exit;}
		elseif ($usuario['senha'] != $this->senha) {
				echo "Senha incorreta";exit;}
		echo "
		<table>
		<tr><td nowrap>Opção 1: <td nowrap>alterar email $this->email para 
			<td><form><input type=email name=editar onchange=submit()>
			<input type=hidden name=velhoEmail value=$this->email></form>
		<tr><td>Opção 2: <td>excluir o email $this->email 
			<td><form>
			<input name=excluir type=submit value=Excluir onchange=submit()>
			<input type=hidden name=excluir value=$this->email>
			</form>
		<tr><td>Opção 3: <td>ir para o Home Page 
			<td><form><input name=home type=submit value='Home Page'></form>
		</table>";}
	public function Cadastrar() {
		$this->email=$_GET['cadastrar'];
		$this->senha=$_GET['senha'];
		$sql = "insert into usuarios (email,senha) values ('$this->email','$this->senha')";
		if (!mysqli_query($this->conexao, $sql)) {return "Erro na tentativa de cadastrar";exit;}}
	public function Editar($novoEmail,$velhoEmail) {
		$sql = "update usuarios set email = '$novoEmail' where email='$velhoEmail'";
		if (!mysqli_query($this->conexao, $sql)) {
			return "Erro na tentativa de editar";exit;}}
	public function Excluir($email){
		$sql = "delete from usuarios where email='$email'";
		if (!mysqli_query($this->conexao, $sql)) {
			return "Erro na tentativa de editar";exit;}}
}


$Usuario = new Usuario();
$Usuario->email=$_GET['email'];
$Usuario->senha=$_GET['senha'];
$resposta = $Usuario->validaUsuario($Usuario);
?>

 

Edited by Frank K Hosaka
Link to comment
Share on other sites

  • 0

no arquivo funcao_funcionario.php deve ficar da seguinte maneira

<?php
if($_POST)
{
require 'Funcionario.class.php';

$nome = $_POST['nome'];
$cpf = $_POST['cpf'];
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];

$func = new Funcionario($nome, $cpf, $usuario, $senha);

echo 'Nome: '.$func->getNome().'<br/>
      CPF: '. $func->getCpf().'<br/>
      Usuario'. $func->getUsuario().'<br/>
      Senha: '. $func->getSenha();

}
else
    echo 'nenhum dado foi enviado';

?>

Agora o porque estava ocorrendo erro,

quando você cria um objeto da classe funcionario esperasse que seja passado no construtor

os valores que serão carregados para os atributos da classe instanciada.

Desta maneira o outro recurso seria criar polimofirsmo em php ou overload

Segundo Janwillem Borleffs, overload é suportado no PHP, porém não da mesma forma como ele é suportado no Java.

Referência: http://diogobesson.wordpress.com/2009/09/1...erentes-em-php/

outra maneira seria criar os métodos contrutores recebendo vazio

ex:

public function __construct($nome="", $cpf="", $usuario="", $senha="")

{

//repetir o mesmo na classe mae

parent::__construct($nome, $cpf);

$this->usuario = $usuario;

$this->senha = $senha;

}

desta forma quando a classe for instanciada não há necessidade de passar valor no construtor

ou passa somente os valores que sejam necessários.

Edited by solano
Link to comment
Share on other sites

  • 0

Estou tentando terminar a parte de alteração de dados de usuário num curso do SENAC, mas o negócio está enrolado.

 

 

 

Inicialmente vem uma imagem com o código abaixo para ser acrescentado na view index.php, que chama a sessão e busca o id do usuário:

 

if($resposta == "Sucesso") {
session_start();
$_SESSION["usuario_id"] = $objUsuario->getId();

header("Location: http://localhost/ecommerce/Views/Produto/listagem_produtos.php");}

 

É mandado fazer um método no arquivo usuario_controller.php, para receber o id do usuário:

<?php

...

public function getUsuario($_SESSION["usuario_id"]) {
$sql = "SELECT * FROM Usuarios WHERE id = $id";
return $_SESSION['usuario_id'];
}

Não há instruções específicas para criar o método, apenas é dito para fazer de acordo com os conhecimentos obtidos nas etapas anteriores, embora eu discorde que os conhecimentos anteriores sejam suficientes para deduzir a escrita dessa função.

 

As instruções são as seguintes:

"Na página de edição, vamos iniciar a sessão e criar uma variável $usuario, que vai receber um usuário do método getUsuario($_SESION[‘usuario_id’]), que deve ser criado no seu respectivo controller. Esse método recebe como parâmetro o id do usuário, que armazenamos na variável $_SESSION, seleciona o usuário através da instrução “SELECT * FROM Usuarios WHERE id = $id” e retorna o resultado obtido. Nosso código na view fica como na imagem a seguir".

 

Na imagem vem esse código que deve ser usado para criar o arquivo editar_usuario.php

session_start();

$usuario = $controllerUsuario->getUsuario($_SESSION["usuario_id"]);

if (isset($_POST['editar'])) {
$objUsuario = new Usuario($_POST['nome'], $_POST['email'], $_POST['senha'], $_POST['endereco']);


        $controllerUsuario = new UsuarioController();

        $resposta = $controllerUsuario->Editar($usuario['ID'],$objUsuario);
//        $resposta = $controllerUsuario->editaUsuario($usuario['ID'],$objUsuario); // Mudei o nome do método pois não existe método com o nome editaUsuario.

        if($resposta == "Sucesso"){
        $usuario = $controllerUsuario->getUsuario($_SESSION["usuario_id"]); // Não entendi o objetivo dessa linha. Ela está declarada na abertura da sessão.
            echo "Conta salva com sucesso!";

        }else{
            echo $resposta;            
        }


}
 

 

Mas a linha 32 do usuario_controller.php:

public function getUsuario($_SESSION["usuario_id"]) {

gera o seguinte erro quando acionado o botão para logar no index.php:

 

Parse error: syntax error, unexpected token "[", expecting ")" in /opt/lampp/htdocs/ecommerce/Controllers/usuario_controller.php on line 32

 

Já pesquisei muito sobre essa escrita, mas não encontro nada parecido para comparar com o essa construção suugerida no curso.

Vou passar o link do arquivo php_senac.zip com os arquivos index.php e usuario_controller.php, caso seja necessário analisar mais detalhes do código. Também passo a apostila com as instruções do curso.

 

http://luciocatende.com/php_senac.zip

 

É lamentável que a tutoria do curso é deficiente no auxílio ao aluno. Tenho encontrado muita dificuldade para realizar a última etapa do curso, que trata da alteração e exclusão de registros no banco de dados.

Agradeço se alguém puder me ajudar.

 

 

Edited by Lúcio Flávio da Silva Sales
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...