• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kingless

Class e functions

12 mensagens neste tópico

Estou a tentar criar uma função para o meu CMS mas só que estou com problemas, o que estou a tentar fazer é criar uma função que defina uma variavel com o seu respectivo valor e outra função que vai buscar a variavel ja definida e que retorne o valor dela.

O código que eu criei foi o seguinte:

class lag {
     var $var = array();

function SetVar( $var, $valor ) {
if(isset($var) AND isset($valor)) {
$this->var[$var] = $valor;
} else {
return false;
}
} 

function GetVar( $var ) {
if(isset($this->var[$var])) {
return $this->var[$var];
} else { 
return false;
}
}
}

E para definir e ir buscar uma variavel definida era só fazer o seguinte:

lag::SetVar( "teste", "isto é um teste" );  

//definiu a variavel teste com o valor isto é um teste;

echo lag::GetVar( "teste" ); 

//Buscar a variavel teste que foi definida em cima

//Isto era suposto mostrar  "Isto é um teste" mas não mostra nada 

Mas só que não funciona... Será que alguem pode me ajudar ?  :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não estás a instanciar. Ou seja, não estás a criar nenhum objecto dessa classe.

Experimenta:

l = new lag()
l->SetVar( "teste", "isto é um teste" );  
echo l->GetVar( "teste" ); 

O que estás a fazer é possível apenas se isso for estático, mas não sei se o modelo de objectos do PHP tem essa funcionalidade.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu já tinha utilizado desta forma.... mas só que eu quero utilizar o operador de resoluão de escopo  :down:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu já tinha utilizado desta forma.... mas só que eu quero utilizar o operador de resoluão de escopo  :down:

Parece-me que queres apenas usar duas funções de acesso a uma variável global, é isso?

Se assim é, então não necessitas de OO para nada...

Viste se o PHP objectos/métodos "static"?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu já tinha utilizado desta forma.... mas só que eu quero utilizar o operador de resoluão de escopo  :down:

Parece-me que queres apenas usar duas funções de acesso a uma variável global, é isso?

Se assim é, então não necessitas de OO para nada...

Viste se o PHP objectos/métodos "static"?

Só queria utilizar o "::" porque acho que é mais bonito :D Mas parece que vou ter que utilizar mesmo a forma default :down:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu já tinha utilizado desta forma.... mas só que eu quero utilizar o operador de resoluão de escopo  :down:

Parece-me que queres apenas usar duas funções de acesso a uma variável global, é isso?

Se assim é, então não necessitas de OO para nada...

Viste se o PHP objectos/métodos "static"?

Só queria utilizar o "::" porque acho que é mais bonito :D Mas parece que vou ter que utilizar mesmo a forma default :down:

Não há uma forma "default", o que há é métodos dinamicos ou estáticos. O OO não foi criado pela sua beleza! :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu utilizo "::" porque acho mais bonito.. eu não disse que ele foi criado pela sua beleza entendeste mal... e quando digo metodo default quer dizer o primeiro metodo que nós aprendemos a utilizar que é este :

$this = new class;

$this->var( "...." ); 

echo $this->var( "...." ); 

:D

Cumps 8)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu utilizo "::" porque acho mais bonito.. eu não disse que ele foi criado pela sua beleza entendeste mal... e quando digo metodo default quer dizer o primeiro metodo que nós aprendemos a utilizar que é este :

$this = new class;

$this->var( "...." ); 

echo $this->var( "...." ); 

:D

Cumps 8)

Agora sou eu que tenho uma dúvida: o PHP tem duas sintaxes para invocar um método de um objecto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

NÂO...

mas...

class a {

function b ($var) {
echo "$var";
  }
}

Tanto posso chamar essa classe assim:

$this = new a;
$this->b("abc");

Como assim:

a::b("abc");

Cumps  8)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

NÂO...

mas...

class a {

function b ($var) {
echo "$var";
  }
}

Tanto posso chamar essa classe assim:

$this = new a;
$this->b("abc");

Como assim:

a::b("abc");

Cumps  8)

Não??? Mas o exemplo que dás diz que sim... Cada vez compreendo menos... A não ser que, pelo facto do método não fazer referência a nenhuma variável da classe o PHP o considerar estático.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Arranjei maneira de fazer o que querias, mas pelo que me disseram isto tem os seus contras que ainda estou a tentar perceber melhor e depois posto aqui...

class Foo {
function Set($prop, $value) {
	Foo::Prop('set', $prop, $value);
}

function Get($prop) {
	return Foo::Prop('get', $prop);
}

function Prop($oper, $name, $value = null) {
	static $props = array();

	if ($oper == 'set') {
		$props[$name] = $value;
	} else {
		if (isset($props[$name])) {
			return $props[$name];
		} else {
			return false;
		}
	}
}
}

Foo::Set('teste', "isto é um teste");

echo Foo::Get('teste');

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já percebi. Estive a ler a documentação do PHP e tens de fazer a invocação com ->. O :: é para invocações de métodos estáticos ou não instanciados.

"The $this pseudo-variable is not usually defined if the method in which it is hosted is called statically. This is not, however, a strict rule: $this is defined if a method is called statically from within another object. In this case, the value of $this is that of the calling object. This is illustrated in the following example:"

Esta informação está aqui: http://www.php.net/manual/en/language.oop.php

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora