_bruninha 0 Denunciar post Postado Dezembro 17, 2010 Estou tentando aprender PHP e OO e estou usando o Fórum PHPBB para estudo lendo seus scripts. E olhando os scripts do fórum encontrei a seguinte linha de código que me fez ficar com dúvida, o nome do arquivo é o posting.php. <?php // Start session management $user->session_begin(); $auth->acl($user->data); ?> Pelo pouco que sei, ele alí está chamando os métodos session_begin() e acl(), não é isso? Mas no script ele não instancia nenhuma classe para usar os métodos. No PHP não preciso instaciar uma classe antes de usar seus métodos? Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Dezembro 17, 2010 Só não precisa quando é estático/método de classe (o que não é o caso). O arquivo posting.php talvez seja incluído, e não acessado diretamente? Compartilhar este post Link para o post Compartilhar em outros sites
_bruninha 0 Denunciar post Postado Dezembro 17, 2010 Só não precisa quando é estático/método de classe (o que não é o caso). O arquivo posting.php talvez seja incluído, e não acessado diretamente? os métodos session_begin() e acl() estao dentro de posting.php. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Dezembro 17, 2010 é impossível usar um objeto sem instancia-lo ao menos uma vez. nesse caso ai, em algum lugar acima desse código, existe a instanciação. pode ser uma Factory, ou 'na mão', mas está lá. Compartilhar este post Link para o post Compartilhar em outros sites
_bruninha 0 Denunciar post Postado Dezembro 17, 2010 o código que se tem acima, antes de se usar os métodos é o seguinte.... Só tem os includes. define('IN_PHPBB', true); $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './'; $phpEx = substr(strrchr(__FILE__, '.'), 1); include($phpbb_root_path . 'common.' . $phpEx); include($phpbb_root_path . 'includes/functions_posting.' . $phpEx); include($phpbb_root_path . 'includes/functions_display.' . $phpEx); include($phpbb_root_path . 'includes/message_parser.' . $phpEx); // Start session management $user->session_begin(); $auth->acl($user->data); Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Dezembro 17, 2010 Esse arquivo posting.php provavelmente está sendo incluido: algum_arquivo.php $user = new User(); $auth = new Auth(); include 'posting.php'; Desse modo os objetos existirão. EDIT: ou você está acessando diretamente? Compartilhar este post Link para o post Compartilhar em outros sites
_bruninha 0 Denunciar post Postado Dezembro 17, 2010 Acho que entendi a lógica de como está funcionando. Vamos lá. Foi intaciado as classes User() e Auth() só que essas classes foram intanciadas dentro de outro arquivo, o arquivo cammon.php, e depois em posting.php ele inclui cammon.php. No exemplo do phpBB, ele criou as instancias dentro de cammon.php, mas não usou a intancia que criou dentro de cammon.php, qual a vantagem de se fazer isso? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Dezembro 17, 2010 use o Responder Azul: ou a 'Resposta Rápida'. acredito que no caso, ele quis manter uma organização. se você precisa de uma instancia de User(); em vários lugares da aplicação, é muito ruim, que você instancie essa class em todos esses lugares. (instanciar varias vezes) logo, ele escolheu um arquivo para 'gerenciar' tudo, e resolveu criar por lá.(assim ele consegue ter um unico objeto daquela classe, para todos os lugares em que ele precise usar). Não usou 'em cammom.php', pq não era ali que ele precisava delas. Compartilhar este post Link para o post Compartilhar em outros sites
_bruninha 0 Denunciar post Postado Dezembro 17, 2010 Obrigado pela ajuda. É que não sabia que era possivel intanciar uma classe em um arquivo é usar essa mesma instancia em outro lugar! Eu pensava que o escopo da intancia era apenas naquele arquivo onde eu criei a intancia da classe. Compartilhar este post Link para o post Compartilhar em outros sites
Shwa 0 Denunciar post Postado Dezembro 17, 2010 quando voce inclui um arquivo em php, o codigo do arquivo incluido é interpretado no proprio lugar da inclusao sendo assim, qualquer variavel declarada (sendo uma instancia ou nao) vai continuar existindo dali em diante naquele escopo funcoes definidas pelo programador, constantes, classes vao continuar tendo escopo global normalmente Compartilhar este post Link para o post Compartilhar em outros sites