acao Posted September 13, 2013 at 09:32 PM Report #524531 Posted September 13, 2013 at 09:32 PM (edited) boas nas páginas web, (pagina html ou php com os formulários etc) é bom, mau ou péssimo instanciar classes e carregar as propriedades? exemplo: $novaclas = new clascarro(); $novaclas->cor = $_post['cor']; $novaclas->inserirCarro(); cumps acao Edited September 13, 2013 at 10:12 PM by brunoais tags code + geshi
RayBacK Posted September 13, 2013 at 10:06 PM Report #524535 Posted September 13, 2013 at 10:06 PM Instanciar as classes não tem problema nenhum agora as propriedades convém sempre passar os dados por um filtro principalmente os que são inseridos por formulários por vários motivos de segurança. Por exemplo neste caso estas a pedir ao utilizador que escolha uma cor, deves ter no código as cores disponíveis ou se aceitares todas as cores fazes um teste para validar se é uma cor. Se tiveres duvidas como o fazer avisa.
brunoais Posted September 13, 2013 at 10:13 PM Report #524537 Posted September 13, 2013 at 10:13 PM Eu usaria: $novaclas = new clascarro($_post['cor']); $novaclas->inserirCarro(); Em vez de: $novaclas = new clascarro(); $novaclas->cor = $_post['cor']; $novaclas->inserirCarro(); "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
acao Posted September 13, 2013 at 11:32 PM Author Report #524545 Posted September 13, 2013 at 11:32 PM boas obrigado pelas respostas. as minhas duvidas são referentes à colocação de algum codigo php na pagina do blowser, porque se não prejudicar a segurança economizo algumas paginas e talvez algum javascript. o codigo colocado foi apenas para ter uma ideia da minha duvida. cumps acao
yoda Posted September 14, 2013 at 01:28 AM Report #524548 Posted September 14, 2013 at 01:28 AM O PHP não é visível por defeito ao utilizador final. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
acao Posted September 14, 2013 at 02:23 PM Author Report #524564 Posted September 14, 2013 at 02:23 PM (edited) O PHP não é visível por defeito ao utilizador final. pois já estive averificar e não detetei nada, mas como normalmente os user dizem para separar o php da folha apresentada ao utilizador pensei que fosse mau colocar cod demasiado nessas paginas. Eu usaria: $novaclas = new clascarro($_post['cor']); $novaclas->inserirCarro(); Em vez de: utilizando a sua deixa eu utilizo o cod assim: Classteste{ //propriedades function metodo(){ //aqui utilizo a propriedade } } //chamo assim $Clas = New Classteste; $Clas->Propriedade = "xpto"; $Clas->metodo; ou assim: Classteste{ //propriedades function metodo($test1,$teste2){ $xpto = $test1; $this->proriedade = $teste2; } } //chamo assim $Clas = New Classteste; //se necessito da proprieda chamoa e ou só o metodo $Clas->Propriedade = "xpto"; $Clas->metodo($var,"xpto"); nunca utilizei a sua deixa, será que pode exemplificar como nomeia a class. cumps acao edit: obrigado pela ajuda, já percebi a cena, o parametro é passado no construtor. cumps acao Edited September 14, 2013 at 10:29 PM by acao
Mcgcaldaira Posted September 14, 2013 at 03:27 PM Report #524565 Posted September 14, 2013 at 03:27 PM duvida sobre ontologias. estou a desenvolver um trabalho de ontologias, na qual utilizo a ontologia cytiGML. estou a utilizar a ferramenta protégé. alguém me pode ajudar como inserir informação relacionado com o meu sitio no protege? obrigada
yoda Posted September 14, 2013 at 04:45 PM Report #524569 Posted September 14, 2013 at 04:45 PM (edited) pois já estive averificar e não detetei nada, mas como normalmente os user dizem para separar o php da folha apresentada ao utilizador pensei que fosse mau colocar cod demasiado nessas paginas. Não há problema, o PHP fica sempre (por defeito) escondido. Porém, misturar PHP e HTML em demasia (na mesma página por exemplo) torna mais difícil manter / actualizar o código, pela quantidade que existe no mesmo ficheiro. Por exemplo, em vez de misturares tudo, podes ter uma página para o PHP e outra para o HTML de cada página. Assumindo que tens uma página chamada site.com/home.php, terias um ficheiro /page/home.php e outro /view/home.php. Exemplo : /page/home.php $template = new View('home'); $data = array( 'color' => $_POST['color'], 'brand' => 'Toyota' ); $car = new Car($data); $car->save(); $template->msg = 'Hello World!'; $template->car = $car->brand; $template->render(); /view/home.php <p><?php echo $msg; ?></p> <p>Your car : <?php echo $car; ?></p> Usar classes "pode" aumentar a eficiência do site, se forem bem feitas, e isso não é uma ciência exacta pois existem n domínios e n necessidades. Analisa sempre a situação que tens em mãos e tenta descobrir a forma mais eficaz de correr o sistema tendo em conta os procedimentos que se repetem, a lógica do domínio (situação), etc. Edited September 14, 2013 at 04:48 PM by yoda before you post, what have you tried? - http://filipematias.info sense, purpose, direction
monteiroxxi Posted September 14, 2013 at 08:38 PM Report #524581 Posted September 14, 2013 at 08:38 PM Boas, Depois de ter lido os vários posts à questão formulada pelo acao fiquei com a sensação que muitos dos que responderam não percebem, em perfeitas condições, os fundamentos da linguagem PHP. Como todos os programadores de PHP deveriam saber que PHP significa Hypertext Preprocessor e que o servidor devolve, sempre, ao cliente web um ficheiro HTML. Por esse motivo é impossível que no script lido pelo browser seja visível o código-fonte escrito em PHP mas sim o resultado para sua interpretação gerando um script em HTML, uma vez que PHP é uma linguagem interpretada e não compilada. No que diz respeito à utilização ou não de classes sou da opinião que quando bem usadas tornam o exercício da programação muito mais facilitado, uma vez que assim tira-se partido dum dos paradigmas que esta linguagem engloba o POO (Programação Orientada pelos Objectos). Para validar formulários o melhor é recorrer-se a Javascript uma vez que os formulários são validados do lado do cliente e não necessitam de um novo pedido HTTP para os mesmos sejam validados. Mas é importante, também, que exista uma validação em PHP para precaver diversas situações, como por exemplo, o utilizador ter desactivado o JS. Para validação de formulários em PHP poder-se-à recorrer também a tecnologias como o AJAX que permitem que seja feito um pedido HTTP que ter que toda a página seja reescrita mas só parte da mesma. Tal pode ser utilizado, por exemplo, para se saber se o nome de um determinado utilizador já encontra registado. Espero que tenha respondido às dúvidas de forma esclarecedora. Cumprimentos. 1 Report
yoda Posted September 14, 2013 at 08:53 PM Report #524583 Posted September 14, 2013 at 08:53 PM Como todos os programadores de PHP deveriam saber que PHP significa Hypertext Preprocessor e que o servidor devolve, sempre, ao cliente web um ficheiro HTML O PHP devolve aquilo que for instruído para devolver, não é só HTML. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
acao Posted September 14, 2013 at 10:48 PM Author Report #524592 Posted September 14, 2013 at 10:48 PM (edited) boas obrigado a todos pelas respostas, estou registando tudo. Eu usaria: $novaclas = new clascarro($_post['cor']); $novaclas->inserirCarro(); Em vez de: aqui sobre a deixa do @brunoais, eu já postei que percebi a situação e de facto percebi, mas queria implementa-la na situação que estou a fazer porque ela é melhor do que estou a usar, porque assim as propriedades podem ficar privadas e é situação que me agrada. mas na minha situação os parametros não são fixos(isto é: conforme o metodo a utilizar os parametros deveriam alterar), ex: se utilizar o (metodo teste1() deveria ter os param campo1 campo2). se utilizar o metodo teste2() deveria ter os param campo1 campo3). um simples exemplo: Class Classexemplo { private $teste1; private $teste2; private $teste3; function __construct($Campo1, $Campo2){ $this->teste1 = $Campo1; $this->teste2 = $Campo2; $This->teste3 = $Campo3; } function metodo1($xpto, $Xpto){ } function metodo2($xpt, $xpt){ } } //chamar $NovaClass = New Classexemplo("Nome","Data") $NovaClass->metodo1("sddf","poiu"); // PS:estou a escrever direto sem testar e não é o objectivo que funcione. //agora como consegueria a situação seguinte: $NovaClass1 = New Classexemplo($Campo1, $Campo2, $Campo3); //sei que se tivesse colocado 3 param no //construtor tudo funcionaria, incluindo a passagem a string vazia pelo motivo de no metodo1 só usar 2 param. //mas acontece que tenho necessidade de mostrar varias alternativas de param (bloco de 3,5,6, etc. $NovaClass1->metodo2("xxxx", "YYYY"); espero que tenham compreendido a minha solicitação. cumps acao Edited September 14, 2013 at 11:17 PM by acao
yoda Posted September 14, 2013 at 11:50 PM Report #524597 Posted September 14, 2013 at 11:50 PM (edited) Isto? class Carro() { public function __construct() { $arguments = func_get_args(); foreach ($arguments as $key=>$argument) { echo 'argument '.$key.' : '$argument.'<br/>'; } return $this; } } } Edited September 14, 2013 at 11:51 PM by yoda before you post, what have you tried? - http://filipematias.info sense, purpose, direction
acao Posted September 15, 2013 at 12:26 AM Author Report #524601 Posted September 15, 2013 at 12:26 AM Isto? class Carro() { public function __construct() { $arguments = func_get_args(); foreach ($arguments as $key=>$argument) { echo 'argument '.$key.' : '$argument.'<br/>'; } return $this; } } } boas @yoda obrigado pela resposta. estive a tentar perceber a sua dica, e também já consultei o manual, mas não consegui implementar a ideia, julgo que terei que usar um if e talvez um ciclo for em vez do foreach, mas como vou mostrar os argumentos na class dependendo do metododo a selecionar posteriormente? cumps acao
yoda Posted September 15, 2013 at 12:36 AM Report #524602 Posted September 15, 2013 at 12:36 AM Eu não percebi bem aquilo que pretendes, tentei adivinhar quando falaste em não ter de saber os argumentos de uma função. Se puderes explicar melhor, agradecia. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
acao Posted September 15, 2013 at 01:13 AM Author Report #524603 Posted September 15, 2013 at 01:13 AM Eu não percebi bem aquilo que pretendes, tentei adivinhar quando falaste em não ter de saber os argumentos de uma função. Se puderes explicar melhor, agradecia. boas 1- tenho uma Classe aonde necessito de carregar as propriedades. 2- não é necessario serem todas carregas quando instancio a class. 3- quando faço o instanciamento da class queria mostrar apenas os argumentos das propriedades necessarias. 4- os argumentos/propriedades a carregar dependem do metodo que vou utilizar. sei que poderia utilizar como argumento todas as propriedades e na passagem de dados os não necessarios nao os utilizava ficavam vazios (sem valor). o que queria era: ao instanciar apresentar x quantidade de argumentos e teriam que ser o (y,D,E e o Z) porque vou selecionar/correr o metodo1. se for o metodo2 já podia necessitar apenas de 2 argumento para carregar duas propriedades e teriam que ser (D e o F) cumps acao
yoda Posted September 15, 2013 at 03:26 AM Report #524605 Posted September 15, 2013 at 03:26 AM Última tentativa : class example { /* $data são todas as propriedades da classe, que ficam escondidas neste array. é aqui que defines os valores por defeito dessas propriedades */ private $data = array( 'color' => 'red' ); /* o construtor aceita apenas um array, que pode ou não estar vazio, e que vai ser unido com a propriedade $data da classe. caso existam chaves iguais, o valor da nova chave sobrepõe-se à antiga */ public function __construct(array $data) { # caso o array não seja associativo if (!empty($data) && ((bool) count(array_filter(array_keys($data), 'is_string')))) { return false; } # caso queiras filtrar a informação que está a chegar $filtered = array(); foreach ($data as $key=>$value) { if (method_exists($this, $key)) { $filtered[$key] = $this->{'filter_'.$key}($value); } } $data = array_merge($data, $filtered); $this->data = array_merge($this->data, $data); return $this; } /* caso queiras aceder às propriedades directamente a partir da classe instanciada, podes fazê-lo com este método : $example = new example(array('name' => 'yoda')); echo $example->name; */ public function __get(string $key) { return array_key_exists($key, $this->data) ? $this->data[$key] : false; } /* caso queiras redefinir propriedades directamente a partir da classe instanciada, podes fazê-lo com este método : $example = new example(array('name' => 'yoda')); $example->name = 'luke'; echo $example->name; */ public function __set(string $key, $value) { $this->data[$key] == $value; return; } /* exemplo de filtro. os filtros são métodos que só são chamados se existirem e que se baseiam nas chaves do array usado para instanciar a classe. Não tem de ser método público. */ public function filter_color($value) { return $value == 'red' ? '#FF0000' : false; } } before you post, what have you tried? - http://filipematias.info sense, purpose, direction
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