Ir para conteúdo

POWERED BY:

Arquivado

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

hyperpixel

OO PHP variaveis globais

Recommended Posts

pessoal estoucom uma questão OO em php

 

seguinte pego os dados vindo de um form

<?php 
include("masterpages.class.php"); 

$Usuario = new Usuario; 
$Usuario->defineUsuario($_REQUEST['LoginUsuario'], $_REQUEST['SenhaUsuario']);
$Usuario->retornaUsuario(); 
$Usuario->CadastraUsuario();
$Usuario->retornaIdUsuario();

$Pessoa = new Pessoa; 
$Pessoa->definePessoa($_REQUEST['NomeUsuario'], $_REQUEST['sexoUsuario']);
$Pessoa->retornaPessoa(); 
$Pessoa->CadastraPessoa();

?>
==========================================

pagina de criacao de classes e funcs

masterpages.class.php

===========================================

<?php
class Usuario{
//Define a classe
class Usuario{
 
//Define dados

var $idCliente; # coloquei global aqui deu erro
var $LoginUsuario;
var $SenhaUsuario;	

function defineUsuario($LoginUsuario, $SenhaUsuario ){
$this->LoginUsuario = $LoginUsuario;
$this->SenhaUsuario = $SenhaUsuario;

}

   function retornaUsuario(){
		  
   echo "<br>LoginUsuario: ".$this->LoginUsuario;
   echo "<br>SenhaUsuario: ".$this->SenhaUsuario;
   } 


 function CadastraUsuario(){
	include('../includes/conn.php');
	$buscaIdCliente = mysql_query("SELECT idCliente FROM `clientes` order by idCliente asc");
	while($row = mysql_fetch_array($buscaIdCliente))

	echo $idCliente=++$row['idCliente'];
		global $idCliente;
	$this->idCliente = $idCliente;
										 
	$InsereUsuario="
	INSERT INTO
	`clientes` (
	`idCliente` ,
	`login` ,
	`senha` )
	VALUES (
	'$this->idCliente',  '$this->LoginUsuario',  'SenhaUsuario')";
	 mysql_query($InsereUsuario, $conexao); 
	}
										
		function retornaIdUsuario(){
		echo "<br>idCliente: ".$this->idCliente;
		 }   
}?>
agora tem por exemplo a classe pessoa que pego o mesmo $this->idCliente mas ele nao acha?! devido a escopo pois foi criada dentro da função : function CadastraUsuario()

<?php
class Pessoa{ #define classe pessoa
var $nome;
var $sexo;
var $dtNasc; 


function definePessoa($NomeUsuario, $sexo, $dtNasc){
$this->NomeUsuario = $NomeUsuario;
$this->sexo = $sexo;
}
		  function retornaPessoa(){
		  echo "<br>NomeUsuario: ".$this->NomeUsuario;
		  } 
				 function CadastraPessoa(){
				 include('../includes/conn.php');
				 $buscaIdPessoa = mysql_query("SELECT idTabPessoas FROM `pessoas` order by idTabPessoas asc");
				 while($row = mysql_fetch_array($buscaIdPessoa))

					   echo $idTabPessoas=++$row['idTabPessoas'];

						 $InserePessoa="INSERT INTO  
						`pessoas` (
						`idTabPessoas` ,
						`idCliente` ,
						`nome`, 
												`sexo`
						 )
						 VALUES (
						 '$idTabPessoas', '$this->idCliente', '$this->NomeUsuario', '$this->sexo')";
						 mysql_query($InserePessoa, $conexao); 
						 }
}
problema esta na $this->idCliente que não é reconhecida aqui, como faco variaveis globais p resolver isso? e tem também a include('../includes/conn.php'); tenho q declarar toda hora como faco p resolver globals. */ :mellow: :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Duas possíveis soluções:

 

Uma classe estender a outra:

class Pessoa extends Usuario {

(Se for fazer isso você precisa incluir o arquivo com a classe Usuario antes de declarar a classe Pessoa

 

---

 

Ou dentro da classe Pessoa você instancia a classe Usuario da mesma forma que fez aqui:

$Usuario = new Usuario;

E aí pode usar da seguinte forma:

$Usuario->idCliente()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Duas possíveis soluções:

 

Uma classe estender a outra:

class Pessoa extends Usuario {

(Se for fazer isso você precisa incluir o arquivo com a classe Usuario antes de declarar a classe Pessoa

 

---

 

Ou dentro da classe Pessoa você instancia a classe Usuario da mesma forma que fez aqui:

$Usuario = new Usuario;

E aí pode usar da seguinte forma:

$Usuario->idCliente()

nao funfou não, nem um dos dois modos, e o lance de global seria outra solução? pois pelo que sei da para usar ela em qq lugar (funcao) do script.

 

vou explanar o script novamente

 

pagina processador recebe os dados do form:

<?php

include("../System/masterpages.class.php");

 

$Usuario = new Usuario;

$Usuario->defineUsuario($_REQUEST['LoginUsuario'], $_REQUEST['SenhaUsuario']);

$Usuario->retornaUsuario();

$Usuario->CadastraUsuario();

$Usuario->retornaIdUsuario();

 

$Pessoa = new Pessoa;

$Pessoa->definePessoa($_REQUEST['NomeUsuario'], $_REQUEST['dtNasc']);

$Pessoa->retornaPessoa();

$Pessoa->CadastraPessoa();

?>

pagina: masterpages.class.php

<?php

//criacao de classes e funcoes

 

//Define a classe

class Usuario{

//Define dados

var $idCliente;

var $LoginUsuario;

var $SenhaUsuario;

 

//Define operacoes

 

function defineUsuario($LoginUsuario, $SenhaUsuario){

$this->LoginUsuario = $LoginUsuario;

$this->SenhaUsuario = $SenhaUsuario;

}

function retornaUsuario(){

echo "<br>LoginUsuario: ".$this->LoginUsuario;

echo "<br>SenhaUsuario: ".$this->SenhaUsuario;

}

 

function CadastraUsuario(){

include('../includes/conn.php');//include da conexao com o banco

$buscaIdCliente = mysql_query("SELECT idCliente FROM `usuarios` order by idCliente asc");//leio o ultimo id na tabela usuarios

while($row = mysql_fetch_array($buscaIdCliente))

$idCliente=++$row['idCliente'];

 

$this->idCliente = $idCliente;//aqui atribuo um valor para a var idCliente

 

function retornaIdUsuario(){

echo "<br>idCliente:"$this->idCliente = $idCliente;

}

 

class Pessoa extends Usuario{#define classe pessoa

 

//preciso declara-la novamente; var $idCliente ??

 

var $nome;

var $dtNasc;

 

 

function definePessoa($NomeUsuario, $sexo, $dtNasc){

 

//preciso criar ela novamente?? : $this->idCliente = $idCliente;

 

$this->NomeUsuario = $NomeUsuario;

$this->dtNasc = $dtNasc;

}

 

function definePessoa($NomeUsuario, $dtNasc){

$this->NomeUsuario = $NomeUsuario;

$this->dtNasc = $dtNasc;

}

function retornaPessoa(){

echo "<br>NomeUsuario: ".$this->NomeUsuario;

echo "<br>dtNasc: ".$this->dtNasc;

}

function CadastraPessoa(){

echo "<br>idCliente: ".$this->idCliente; //aqui esta o problema peço p escrever e nao tem valor nenhum

}

}

 

Preciso do idCliente para ativar outras funcoes.

Se fizer include da conexao com o banco no inicio do escopo ou topo da pagina ela não entra dentro de funções quando vou trabalhar com o banco, aparece o erro que não existe cnexão como posso resolver isto? pois não é certo dentro de toda funcao ficar fazendo include da conexao!

 

valeu

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.