Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Já entendi que as variaveis criadas fora das funções não são enxergadas dentro delas, e é preciso utilizar a palavra global, e funciona! Ex:
<?php
$texto = 'Olá';
function mostrar()
{
global $texto;
echo $texto;
}
mostrar();
//imprime o Ola na tela
?>
MAS quando eu coloco a mesma coisa dentro de uma classe, nao funciona mais, o que eu faço?
Vaja o codigo
<?php
class teste {
public $texto = 'Olá';
public function mostrar(){
global $texto;
echo $texto;
}
}
$a = new teste();
$a->mostrar();$this = Refere-se a tudo que está dentro da classe com exceção de variáveis.
Fiz vários exemplos de acesso em classes aqui, qualquer dúvida é só perguntar
Spoiler
<?php
class teste {
public $attrA = "Sou um atributo público";
protected $attrB = "Sou um atibuto protegido";
private $attrC = "Sou um atributo privado";
private $attrd;
/* Mostra com possibilidade de alterar um ATTR protegido */
public function mostarProtegido($parametro = null) {
if ($parametro) {
$this->attrB = (string) $parametro;
}
return ($this->attrB);
}
/* Mostra um atributo privado */
public function mostarPrivado() {
return ($this->attrC);
}
/* Armazena uma variável criada em um método que pode ser utilizada em toda classe */
public function trasportarVariavelPorAtributo() {
$variavel = "Eu sou uma variável";
$this->attrd = $variavel;
}
public function verVariavel() {
$this->trasportarVariavelPorAtributo();
return ($this->attrd);
}
}
class extendFilha extends teste {
private function alteraProtegido() {
$this->attrB = "Sou um atributo protegido, mas posso ser modificado por classes filhas";
}
public function alterar() {
$this->alteraProtegido();
return ($this->attrB);
}
}
$objetoA = new teste();
echo $objetoA->attrA; // Como o atributo é publico eu posso acessar-lo diretamente
$objetoA->attrA = "Modifiquei o atributo público";
echo "<br />";
echo $objetoA->attrA; // Mostro o público depois que modifiquei aqui mesmo
echo "<br />";
//echo $objetoA->attrB; /* ERRO não posso acessar algo protegido pela classe */
//echo $objetoA->attrC; /* ERRO não posso acessar algo privado da classe */
echo $objetoA->mostarProtegido(); // Mostro o protegido porque o método pode acessar
echo "<br />";
// Altero o protegido porque criei a condição para enviar parâmetro
echo $objetoA->mostarProtegido("Modifiquei o protegido");
echo "<br />";
echo $objetoA->mostarPrivado(); // Mostro o privado poque o método pode acessar
echo "<br />";
/*
* Nesse caso o método publico vai acessar o método privado que vai criar uma variável
* e armazenar se valor em um atributo e retornar ele.
* Note que uso do $this foi para acessar dessa vez um método privado
*/
echo $objetoA->verVariavel();
echo "<hr />";
$objetoB = new extendFilha();
echo $objetoB->attrA; // Como é uma classe filha posso acessar o publico da classe mãe
echo "<hr />";
echo $objetoB->mostarProtegido("Filha que modificou o protegido da mãe"); // A filha pode acessar o protegido da mãe
/*
* Como as classes filhas podem acessar o protegido da mãe ela também
* pode alterar o comportamento da mãe nesse caso
*/
echo "<br />";
echo $objetoB->alterar();
Olá Mirian Almeida,
class teste {
$a->mostrar(); //um valor padrão
Vale a pena a leitura de cada um dos tópicos abaixo:
http://php.net/manual/pt_BR/language.oop5.php