kingless Posted December 31, 2006 at 06:23 PM Report #73717 Posted December 31, 2006 at 06:23 PM Neste simples tutorial vou tentar ensinar mais ou menos como utilizar classes de PHP. Antes de começarem a aprender a trabalhar com classes devem primeiro aprender a trabalhar bem com funções do PHP. Se já sabem trabalhar com funções então podem continuar. O que são classes? Classes são conjuntos de variáveis e de funções que utilizam essas variáveis. As classes de PHP definem-se da seguinte forma: class nome_da_classe { var $nome_da_variavel = ''; function nome_da_funcao () { //O código da função fica aqui } } As classes para funcionarem precisam de ser "chamadas" para "chamarmos" uma classe temos que utilizar a seguinte sintaxe: $classe = new nome_da_classe(); $classe->nome_da_funcao(); Vou explicar o código ao pormenor. class nome_da_classe { Isto serve para definir uma classe com o nome nome_da_classe. Nós podemos utilizar qualquer nome para definir uma classe. var $nome_da_variavel = ''; Nós utilizamos var para definirmos uma variável a ser utilizada por 1 ou mais funções dessa classe. As variáveis definidas na classe funcionam como se fossem variáveis globais ou seja uma variável que eu definir na classe vai poder ser utilizada por todas as funções da classe. Vou mostrar um pequeno exemplo e para exemplificar nada melhor que a realidade. class humano { var $nome = ''; function criar( $nome_do_humano ) { $this->nome = $nome_do_humano; } function nome () { echo $this->nome; } } $classe = new humano(); $classe->criar( 'kingless' ); $classe->nome(); Este código vai imprimir kingless Imagino que agora estejam a pensar o seguinte: mas para que serve o $this ? O $this é um objecto predefinido pelo PHP para podermos "chamar" variáveis e funções dentro da classe. Vou explicar a classe acima ao pormenor para que entendam melhor. class humano { Como já devem saber defini a classe com o nome humano. var $nome = ''; Depois defini uma variável a que eu chamo "variável global da classe" porque esta pode ser utilizada por todas funções da classe... como eu estava a dizer defini uma variável com o nome $nome (que vai "guardar" o nome do humano). function criar ( $nome_do_humano ) { Defini uma função criar com a variável $nome_do_humano para que seja o usuário a definir o nome do humano. Quem já sabe trabalhar com funções sabe isso. $this->nome = $nome_do_humano; Antes de eu explicar vou perguntar: o que é que fiz aqui? Se disse que guardei o valor da variável $nome_do_humano na variável da classe para que essa possa ser acedida por qualquer função então acertou porque foi isso mesmo que eu fiz, eu utilizei o $this->nome para guardar o valor de $nome_do_humano na variável que eu chamo "variável global da classe". function nome() { Defini a função nome para essa variável retornar o nome do humano. echo $this->nome; Vamos ver se estão mesmo a aprender. O que é que este código vai fazer ? Se disse que este código vai imprimir o valor da variável da classe $nome que foi definida anteriormente então acertou porque é isso mesmo que o código faz. Como se deve lembrar na função criar nós guardamos na variável da classe $nome o valor da variável $nome_do_humano. $classe = new humano(); O operador new serve para instanciar, o que eu chamo de chamar classe. Neste caso "chamamos" a classe humano utilizando o operador new. $classe->criar( "kingless" ); Aqui nós "chamamos a função" criar e definimos a variável $nome_do_humano com o valor "kingless" e que será guardado na variável na classe. $classe->nome(); "Chamei" a classe nome esta função vai imprimir o nome que foi guardado na variável da classe que neste caso é "kingless". E aqui termina o tutorial espero que este tutorial ajude a entender melhor as classes do PHP. Caso tenham duvidas, "postem" as duvidas aqui neste tópico. Achas que falta alguma coisa no tutorial? Envia-me uma MP Até ao próximo tutorial 👍 Tutorial por kingless - (31/12/2006)
Bruno Posted December 31, 2006 at 07:05 PM Report #73722 Posted December 31, 2006 at 07:05 PM Embora seja um exemplo existe ali algumas coisas que melhorava! 👍 Como definiste "var $nome" fora da class podes sacar a variável sem precisar de recorrer à função que criaste (basta $classe->nome). Assim sendo podes introduzir o "private" de modo a que se justifique a criação da função nome(). Outra coisa que podes evitar é fazeres echo dentro da class, devias fazer return apenas! De resto gostei do tutorial 😉 EDIT: Outro ponto interessante era referires os construtores... neste caso se qq humano tem um nome deixavas de ter o criar e passavas a dar o nome no momento da criação!
kingless Posted December 31, 2006 at 08:13 PM Author Report #73723 Posted December 31, 2006 at 08:13 PM Embora seja um exemplo existe ali algumas coisas que melhorava! 👍 Como definiste "var $nome" fora da class podes sacar a variável sem precisar de recorrer à função que criaste (basta $classe->nome). Assim sendo podes introduzir o "private" de modo a que se justifique a criação da função nome(). Este tutorial é apenas para pessoas que só estão a começar a aprender classes agora por isso eu simpliquei o maximo. E se não sabes o "private" é apenas para PHP 5 😉 Outra coisa que podes evitar é fazeres echo dentro da class, devias fazer return apenas! Tas muito enganado não tenho que evitar de utilizar "echo",, sabes qual é a diferença entre "return" e "echo" ? Se não sabes vou tentar explicar... o "echo" imprime o resultado o "return" retorna o resultado mas não imprime ou seja se utilizarmos "return" na função, para imprimir o resultado temos que utilizar o echo exemplo: return class a { function b () { return "kingless"; } } $classe = new a(); $class->b(); //Não imprime nada porque utilizamos o "return" echo $class->b(); //Imprime "kingless" mas como ves tivemos que utilizar echo de uma maneira ou outra echo class a { function b () { echo "kingless"; } } $classe = new a(); $class->b(); //imprime "kingless" echo $class->b(); //Imprime "kingless" Espero que tenhas percebido a diferença 😉 De resto gostei do tutorial 😛 thanks 😛 EDIT: Outro ponto interessante era referires os construtores... neste caso se qq humano tem um nome deixavas de ter o criar e passavas a dar o nome no momento da criação! Meu caro isto é um tutorial para inciantes 😛
Bruno Posted December 31, 2006 at 08:19 PM Report #73724 Posted December 31, 2006 at 08:19 PM Ui, vou supor que n me explicaste o que faz o return eheheh! O que eu disse é q é sempre aconselhável fazeres return dentro de classes em vez de echo, se depois quiseres imprimir fazes tu o echo! 👍 Tirando a do private as outras 2 sugestões que te dei em nada complicam o tutorial, pelo contrário, simplificavam o teu código e colocavam-no mais de acordo com o "standart"! 😉 --- EDIT --- Em qq tutorial de classes a 1ª coisa que referem é a existência de um construtor não vejo porque dizes que isso não é para principiantes :S Mas claro, o tutorial é teu, só estava a tentar sugerir melhorias 😉
kingless Posted December 31, 2006 at 08:22 PM Author Report #73725 Posted December 31, 2006 at 08:22 PM Para iniciantes as tuas sugestões não foram as melhores 😉 só iria complicar alguem que estivesse a começar agora. Mas mesmo assim obrigado pelas sugestões 👍 EDIT: Desculpa lá... mas mostra-me ai um tutorial basico para iniciantes a falar sobre construtores logo de primeira.
Bruno Posted December 31, 2006 at 08:30 PM Report #73726 Posted December 31, 2006 at 08:30 PM Em 31/12/2006 às 21:22, kingless disse: Para iniciantes as tuas sugestões não foram as melhores 😉 só iria complicar alguem que estivesse a começar agora. Na tua opinião 👍 https://www.revista-programar.info/static/downloads/Revista_PROGRAMAR_4.pdf Página 9 e 10 De qq modo basta perguntares a qq pessoa q use classes no dia-a-dia q te vai dizer q antes de falar de funções genéricas dentro de classes referia o construtor 😉
kingless Posted December 31, 2006 at 08:36 PM Author Report #73727 Posted December 31, 2006 at 08:36 PM Esse tutorial que esta na revista programar não serve para alguem que esta a ouvir falar sobre classes pela primeira vez... Este tutorial que esta na revista é mais para alguém que ja sabe o basico. Já agora... A função "__construct" só foi implementada no PHP 5 por isso também não é aconselhado para iniciantes que mal conseguem distinguir as diferenças entre PHP 4 e PHP 5, depois temos o construtor "extends" que tambem não é aconselhado para um iniciante porque é um bocado mais complicado.
Bruno Posted December 31, 2006 at 08:46 PM Report #73728 Posted December 31, 2006 at 08:46 PM Eu sei disso, alias eu até falei disso no tópico dessa revista... Mas pronto, já vi que não te vou convencer... nem com a documentação básica do PHP sobre objectos (do PHP 4): http://pt.php.net/manual/en/language.oop.php Provavelmente tb vais dizer que não é para quem se inicia... e portanto não sei como querias q te convence-se eheh!
kingless Posted December 31, 2006 at 09:00 PM Author Report #73730 Posted December 31, 2006 at 09:00 PM O tutorial que esta no site do PHP é para inciantes mas é um bocado mais dificil um iniciante aprender classes no site do PHP, não sei se ja reparaste mas muitas pessoas vão sempre a procura de tutoriais fora do site do PHP. Já agora não sei se estou a ver mal mas parece que no site do PHP o construtor não é as primeira coisa que eles falam 👍 Parece que eles falam na primeira página exactamente aquilo que eu falei aqui apesar de lá não explicar ao pormenor como eu expliquei.
Bruno Posted December 31, 2006 at 09:02 PM Report #73731 Posted December 31, 2006 at 09:02 PM Ui é na 3ª linha de texto se ignorares os links e os quadros 👍 Mas pronto já vi que nem valia a pena ter dito nada... tenho pena q assim seja, mas pronto 😉 O tutorial está "bom" como votei, mas realmente falta pelo menos a referencia ao construtor Bem, vou bazar... n vou estar aqui até às 00 a argumentar ctg.
kingless Posted December 31, 2006 at 09:05 PM Author Report #73732 Posted December 31, 2006 at 09:05 PM Acho que não te referias aos construtores __sleep e __wakeup 😉 quando disseste "Outro ponto interessante era referires os construtores... neste caso se qq humano tem um nome deixavas de ter o criar e passavas a dar o nome no momento da criação!" mas pronto... 👍 (só pa xatear) Bem... vamos deixar deste blah blah 😉 Não podemos ficar aqui a argumentar até 2007 lol
Bruno Posted December 31, 2006 at 09:10 PM Report #73733 Posted December 31, 2006 at 09:10 PM Agora nem percebo o que dizes :bored: Quem falou no __sleep e __wakeup? ... Eu falo na linha: In PHP 4, only constant initializers for var variables are allowed. To initialize variables with non-constant values, you need an initialization function which is called automatically when an object is being constructed from the class. Such a function is called a constructor (see below). De qq modo por mim chega...
kingless Posted December 31, 2006 at 09:28 PM Author Report #73737 Posted December 31, 2006 at 09:28 PM Ah agora entendi... estavas a falar disto class humano { var $nome = 'kingless'; function nome () { echo $this->nome; } } $class = new humano(); $class->nome(); Se for isso então tudo bem 😉 EDIT: Tu falaste do private que é avançado depois falaste de construtores pensei que estivesses a falar de algo mais avançado como por exemplo __construct ou extends que também são construtores 👍
HecKel Posted January 2, 2007 at 04:37 AM Report #73955 Posted January 2, 2007 at 04:37 AM Boas! Sem querer continuar com a "briga", mas sou forçado a dar razão ao Bruno. Uma classe é um objecto, e não tem qualquer sentido um objecto existir sem ter sido criado antes. O que faz um construtor? Cria um objecto consoante algumas regras definidas pelo programador de forma a evitar conflitos por falta de inicialização de membros privados e afins. A explicação do construtor além de ir melhor o tutorial (que me parece bastante intuitivo) também iria evitar algumas perguntas de como criar o objecto, porque tenho de fazer sets, porque não posso fazer logo isto e afins. Se achas que evitar isto é complicar..., lamento mas estou totalmente em desacordo. Sobre o todos os tutoriais sobre classes para iniciantes referirem construtores..., não posso generalizar, este é um em que não se fala, mas de facto é regra geral dedicar uma secção aos construtores (e destrutores no caso de C++). De resto, parabéns tanto pela iniciativa como pelo tutorial 👍 abraços, HecKel Look Left Blog
kingless Posted January 2, 2007 at 04:46 AM Author Report #73958 Posted January 2, 2007 at 04:46 AM @Heckel A nossa pequena discussão não foi por ele ter razão ou não ter foi um simples mal entendido meu, eu é que entendi mal o primeiro post dele e como disse no post anterior "Se for isso então tudo bem". 👍
deathseeker25 Posted January 6, 2007 at 10:55 PM Report #74912 Posted January 6, 2007 at 10:55 PM Votei "Muito Bom" para o tutorial do kingless. Estou de acordo com o kingless no que toca á utilização do __construct() num tutorial para pessoas que se estão a iniciar no PHP. Eu quando li pela primeira vez sobre OOP em PHP também não li sobre o __construct, visto que apresentava apenas como criar uma classe com uma função e como criar um objecto. Cá está o link em que li pela primeira vez sobre este assunto: http://www.phpdeveloper.org/news/5719. Seja como for, o tutorial está Muito Bom, a iniciativa de criar este tipo de conteúdos é sempre louvável e espero pelas próximas edições (se quiseres ajudo na realização dos mesmos).
Bruno Posted January 6, 2007 at 11:24 PM Report #74917 Posted January 6, 2007 at 11:24 PM Ah agora entendi... estavas a falar disto class humano { var $nome = 'kingless'; function nome () { echo $this->nome; } } $class = new humano(); $class->nome(); Se for isso então tudo bem 🙂 EDIT: Tu falaste do private que é avançado depois falaste de construtores pensei que estivesses a falar de algo mais avançado como por exemplo __construct ou extends que também são construtores 😞 Ah, afinal o teu problema era outro... aparentemente não sabes o que é um construtor 😉 O teu exemplo poderia ficar assim: class humano { var $nome; function humano($name) { $this->name = $name; } function obtemNome() { return $this->nome; } } $class = new humano("kingless"); echo $class->obtemNome(); O extends não tem nada haver com construtor 😄
Bruno Posted January 6, 2007 at 11:25 PM Report #74918 Posted January 6, 2007 at 11:25 PM Estou de acordo com o kingless no que toca á utilização do __construct() num tutorial para pessoas que se estão a iniciar no PHP. Eu quando li pela primeira vez sobre OOP em PHP também não li sobre o __construct, visto que apresentava apenas como criar uma classe com uma função e como criar um objecto. Cá está o link em que li pela primeira vez sobre este assunto: http://www.phpdeveloper.org/news/5719. Não compreendi 😞 O artigo que mostraste fala logo em construtores... (de reparar que eu nunca falei no __construct() porque esse é apenas um dos métodos de o fazer e só é suportado pelo PHP5) Como referi em qq tutorial de objectos se explica logo o conceito de construtor e o que o death apresentou não é excepção 😉
deathseeker25 Posted January 7, 2007 at 12:45 AM Report #74935 Posted January 7, 2007 at 12:45 AM Estive a rever conceitos e de facto parece que me equivoquei. Um construtor não tem obrigatoriamente de ser através da função __construct (que, como tu disseste, só pode ser utilizada pelo PHP5), mas pode também ser feito através de funções com o mesmo nome da classe correcto? Assim sendo, o kingless poderia realmente ter referido esse aspecto, mas se preferiu introduzir esse conceito para a próxima parte do tutorial, então óptimo. Todos os tutoriais têm diferentes modos de apresentação, pelo que devem ser respeitados. Resta-nos esperar pela continuação do tutorial. 😞
HecKel Posted January 7, 2007 at 06:30 PM Report #75029 Posted January 7, 2007 at 06:30 PM Desrespeitar, julgo que ninguém desrespeitou 😄 Apenas tentamos alertar para algo que consideramos importante 😞 Já agora, uma critica :X Execelente <- Isto é entre Excelente e Muito Bom? 😛 abraços, HecKel Look Left Blog
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now