Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jonatã Cioni

[Resolvido] Classe dando erro de função

Recommended Posts

bom galera... tah dando um erro ao acessar a função da classe, não sei pq... :(

 

Erro:

Fatal error: Call to undefined function validaCPF() in C:\wamp\www\testeClasse\index.php on line 20

 

classe:

<?php
class validaDocumentos{

protected $digA, $digB, $digC, $digD, $digE, $digF, $digG, $digH, $digI, $digJ, $digK, $multDigJ, $vDigJ, $multDigK, $vDigK;

public function validaCPF($cpf){
	$this->digA = substr($cpf,0,1);
	$this->digB = substr($cpf,1,1);
	$this->digC = substr($cpf,2,1);
	$this->digD = substr($cpf,3,1);
	$this->digE = substr($cpf,4,1);
	$this->digF = substr($cpf,5,1);
	$this->digG = substr($cpf,6,1);
	$this->digH = substr($cpf,7,1);
	$this->digI = substr($cpf,8,1);
	$this->digJ = substr($cpf,9,1);
	$this->digK = substr($cpf,10,1);

	$this->multDigJ = ($this->digA * 10) + ($this->digB * 9) + ($this->digC * 8) + ($this->digD * 7) + ($this->digE * 6) + ($this->digF * 5) + ($this->digG * 4) + ($this->digH * 3) + ($this->digI * 2);

	if($this->multDigJ % 11 == 0 or $this->multDigJ % 11 == 1){
		$this->vDigJ = 0;
	}else if($this->multDigJ % 11 >= 2 or $this->multDigJ % 11 <= 10){
		$this->vDigJ = 11 - $this->multDigJ % 11;
	}

	$this->multDigK = ($this->digA * 11) + ($this->digB * 10) + ($this->digC * 9) + ($this->digD * 8) + ($this->digE * 7) + ($this->digF * 6) + ($this->digG * 5) + ($this->digH * 4) + ($this->digI * 3) + ($this->digJ * 2);

	if($this->multDigK % 11 == 0 or $this->multDigK % 11 == 1){
		$this->vDigK = 0;
	}else if($this->multDigK % 11 >= 2 or $this->multDigK % 11 <= 10){
		$this->vDigK = 11 - $this->multDigK % 11;
	}

	if($this->digJ == $this->vDigJ && $this->digK == $this->vDigK){
		return "CPF Válido";
	}else{
		return "CPF Inválido";
	}
}
}
?>

 

index:

<?php 
include("classes/validaDocumentos.php"); 
?>
<!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>

<body>
<form id="form1" name="form1" method="post" action="?acao=validadoc">
 <label for="cpf"></label>
 <input type="text" name="cpf" id="cpf" />
 <input type="submit" name="button" id="button" value="Validar CPF>>" />
</form>
<?php
$pegaCPF = $_POST['cpf'];

if($_GET['acao'] == "validadoc"){
$verificaCPF = new validaDocumentos;
$verificaCPF = validaCPF($pegaCPF);
}
?>
</body>
</html>

 

detalhe: esta foi a primeira classe que criei... ainda estou engatinhando em relação a PHP-OO...

 

vlw a quem me ajudar ae...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque você fez uma chamada a função,e não a método.

Chamada a método:

$object->method();

 

$verificaCPF = $verificaCPF->validaCPF($pegaCPF);

Que tal ler os artigos de OO do JBN?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque você fez uma chamada a função,e não a método.

Chamada a método:

$object->method();

 

$verificaCPF = $verificaCPF->validaCPF($pegaCPF);

Que tal ler os artigos de OO do JBN?

 

coloquei assim na index:

<?php
include("classes/validaDocumentos.php");
?>
<!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>

<body>
<form id="form1" name="form1" method="post" action="?acao=validadoc">
 <label for="cpf"></label>
 <input type="text" name="cpf" id="cpf" />
 <input type="submit" name="button" id="button" value="Validar CPF>>" />
</form>
<?php
$pegaCPF = $_POST['cpf'];

if($_GET['acao'] == "validadoc"){
if(empty($pegaCPF)){
	echo 'você tem que digitar um Numero de CPF';
}else{
	$verificaCPF = new validaDocumentos;
	$verificaCPF = $verificaCPF->validaCPF($pegaCPF);
}
}
?>
</body>
</html>

 

e continua sem dar retorno nenhum... :(

 

me manda o link desses artigos que você falou, eibon, sobre OOP... que tudo que tiver, sobr OOP com ctz quero dar uma lida... vlw... e muito obrigado desde jah...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, não me leve a mal, mas antes de aprender sobre orientação a objetos, antes mesmo de abrir um arquivo e começar class MinhaClasse... volte um pouco as origens e reveja a base da programação.

 

O problema que está tendo em si nada tema a ver com orientação a objetos (pelo menos não agora, depois da ajuda do Kratos).

 

A grosso modo, desconsiderando a real finalidade da orientação a objetos, você está trabalhando com funções. Afinal, na essência, uma classe é um apanhado de funções, concorda?

 

Existem quatro tipos de funções que podem ser declaradas no PHP:

 

  • Funções que não recebem argumentos e não retornam nada
    Em um objeto você trabalha sobre uma propriedade definida alterando seu valor para ser usado mais à frente. Não há return
     
    Foram de um objeto você usaria a palavra-chave global ou o array superglobal $GLOBALS para aftera variáveis previamente declaradas que estejam fora do escopo local de uma função.
     
    À parte disso esse tipo de função pode, opcionalmente ecoar/printar alguma coisa.
     
  • Funções que recebem argumentos e não retornam nada
    Idem ao de cima, mas você passa um ou mais parâmetros, evitando-se, assim problemas de escopo causados por global
     
  • Funções que não recebem parâmetros e retornam alguma coisa***
    Idem ao primeiro item porém, aqui há o return. Depois de tudo que a função fizer, alguma coisa vai ser retornada.
     
    Salvo casos em que essas funções retornam um objeto ou outra função dois dois primeiros tipos, invocar esse tipo de função NÃO CAUSA NENHUM TIPO DE EFEITO por si só.
     
    Você deve atribuir a chamada à uma variável para que possa ter o que operar. Porém, APENAS atribuir a uma variável só vai fazer com que a memória necessária seja ocupada e que a variável seja adicionada na tabela de símbolos interna do PHP.
     
    Depois de atribuído, você deve fazer alguma coisa com essa variável.
     
  • Funções que recebem parâmetro e retornam alguma coisa
    Idem ao de cima, mas se aplicam as regras de parâmewtros descritas no item #2

Entendeu aonde quero chegar? Veja:

 

Sua classe:

public function validaCPF($cpf){ // Olhe aqui

//...

if($this->digJ == $this->vDigJ && $this->digK == $this->vDigK){
                       return "CPF Válido"; // Aqui
               }else{
                       return "CPF Inválido"; //Ee aqui também
               }

Onde você a usa:

$verificaCPF = new validaDocumentos;
$verificaCPF = $verificaCPF->validaCPF($pegaCPF);

Percebe que ela se enquadrou na terceira categoria?

 

Consegue ver que seu problema está todo resumido na última linha da descrição dada na terceira categoria?

 

Você retorna uma string informado se é válido ou não, mas e daí. Se você não mostrar essa saída para o usuário, é claro que não vai funcionar.

 

Resumindo a ópera, faltou um echo/print/printf... para mostrar o valor do return. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

intão eu deveria fazer isso:

 

public function validaCPF($cpf){ // Olhe aqui

//...

if($this->digJ == $this->vDigJ && $this->digK == $this->vDigK){
                       return echo "CPF Válido"; // Aqui
               }else{
                       return echo "CPF Inválido"; //Ee aqui também
               }

 

????

 

ou dar um echo no index, e se for no index, cm eu faço isso???

 

e eu sei, brother... que classe eh um apanhado de varias funcções... e ainda vou colocar varias funções pra validar cartões de credito, dentre outras coisas tb...^^

 

EDIT:

 

bom... podem me chamar de IMBECIL... resolvi jah...^^:

$verificaCPF = new validaDocumentos;
$verificaCPF = $verificaCPF->validaCPF($pegaCPF);
echo $verificaCPF;

as vezes eu esqueço de fazer o mais óbvio...¬¬...

 

vlw, msmo, bruno... me ajudou bastante essas coisas que você disse... brigadão...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.