← Desenvolvimento

[ajuda] Class e functions

Lida 3018 vezes

Offline

kingless 
Membro
Mensagens 857 Gostos 0
Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2 Level 1

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:
Código: [Seleccione]

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:

Código: [Seleccione]

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 ? :roll:
Offline

Nazgulled 
Membro
Mensagens 552 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

No meu sistema ao executar isso tal e qual como tens ai, da-me logo um erro:

Fatal error: Using $this when not in object context in c:\WWW\info.php on line 45

E penso que isto seja por estares a usar o $this->nome_variavel quando estas a aceder estaticamente a uma função. Para usares estaticamente terias que modificar o $this->var para apenas $var, mas como dentro dessa função já tens uma variavel chamada $var terás de mudar o nome pa outra diferente.

Não sei muito sobre chamar funções estaticas e aceder a variaveis estaticas, mas se calhar o melhor é criares um novo objecto dessa classe e não chamares as funções estaticamente.
Offline

kingless 
Membro
Mensagens 857 Gostos 0
Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2 Level 1

Eu utilizei outra forma antes de utilizar o operador de resolução de escopo... mas só que eu prefiro o "::"

Vou ver se encontro outra forma de fazer isso...
Offline

Nazgulled 
Membro
Mensagens 552 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

lol... mas ao usares o :: não tas a inicializar nenhum objecto e as coisas funcionam de maneira diferente... talvez seja possivel fazer tudo estaticamente, mas não faço ideia como...
Offline

kingless 
Membro
Mensagens 857 Gostos 0
Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2 Level 1

ja tentei não funcionou... Vou ter que utilizar a forma default  :?
Offline

Nazgulled 
Membro
Mensagens 552 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

tive a perguntar noutros forums e o que me responderam foi mesmo isso, não dá. chamando as funções estaticamente, não dá pa fazer isos, tens mesmo de criar um objecto e aceder por ai.
Offline

Nazgulled 
Membro
Mensagens 552 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

afinal é possível... claro que tem os seus contras, mas aqui está o código que o faz da maneira que queres:

Código: [Seleccione]
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');
Offline

kingless 
Membro
Mensagens 857 Gostos 0
Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2 Level 1

Olha era isso mesmo  :D já agora quais são os contras  :? ?
Offline

Nazgulled 
Membro
Mensagens 552 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

o gajo que me disse isso disse, que não se podia fazer hierarquias de classes, tipo teres A e teres a B extendida a A dps inicializas a B e podes aceder a metodos e variaveis das duas, no entanto, eu consegui fazer um simples exemplo de hierarquia e funcionou. agora tou a espera da resposta do gajo, pk, ou ele enganou-se, ou então eu percebi mal o que ele quis dizer...
Offline

Nazgulled 
Membro
Mensagens 552 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

xiiiiiuuuuu, n contes a ninguém lol...
Offline

kingless 
Membro
Mensagens 857 Gostos 0
Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2 Level 1

Preciso que me ajudes a trocar tables/css por divs/css da mesma maneira que te ajudaram aqui ja a uns tempo AQUI!