Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
>
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.
é 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á.
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);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?
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?
use o Responder Azul: /applications/core/interface/imageproxy/imageproxy.php?img=http://img222.imageshack.us/img222/8498/respondery.png&key=db0a5d713bd1099ba19595f08a80f5881ed1a276406432195f83536896c761d5" alt="respondery.png" />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.
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.
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
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?