Criar função estática

Seguinte,

Eu criei uma classe e uma função estática:




class cidade {


    public static function lista(){

       

    }

}



Eu gostaria de saber, como eu capturo os parametros setados para eles, dentro da função, estou fazendo assim:





$cidade = new cidade;

$cidade->codcidade = 10;

$cidade->nome = 'Cidade';

$cidade->lista();


Eu gostaria de saber como pegar o codcidade, nome, e qualquer um outro que eu usar, sem precisar setar como public $_codcidade, public $_nome, na classe.


Tem alguma solução?




Os atributos são públicos por padrão pelo Yii, então vc não precisa setar nada. Mas não sei se da pra pegar os valores setados numa instância dentro de um método estático.

Imagine o exemplo:





$cidade1 = new Cidade;

$cidade1->codcidade = 10;

$cidade1->nome = 'Cidade';


$cidade2 = new cidade;

$cidade2->codcidade = 11;

$cidade2->nome = 'Cidade2';


Cidade::lista();






Da forma acima, eu tenho 2 instâncias do mesmo objeto. Não tem como um método de classe saber a qual instância me refiro, a não ser que vc passe pra função a instância.

Sobre a ordem eu até sei, não irei istanciar 2x, e depois chamar a função.

Só queria saber como eu vou captura esses:

$cidade1->codcidade = 10;

$cidade1->nome = ‘Cidade’;

Dentro da class, eu tento usar echo $this->codcidade; e dá erro.

Sim, é pq o $this não existe. O $this se refere a sua instância atual, e só pode ser usado em métodos não-estáticos. Para os métodos estáticos não existe instância, logo o $this não existe. Da uma olhada no link abaixo.

http://www.php.net/manual/pt_BR/language.oop5.static.php

Métodos estáticos/ Métodos de classe são métodos que são chamados só pela classe. No sei caso, se não for uma classe de modelo (Na qual requer uma instância), vc pode transformar estes atributos em variáveis estáticas, e acessar no método estático como Self::$variavel.

Antes de ler seu comentário, resolvi tirar o static da função e funcionou.

Acabei de ler o link, se não me engano, acho que observei isso ontem, nesse link.

Pelo o que tu me falo, alguns metódos só é executando dentro da classe, entendi agora.

Valeu Daniel.